@allbridge/bridge-core-sdk 3.27.0-alpha.1 → 3.27.0-alpha.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (76) hide show
  1. package/dist/browser/index.js +3 -3
  2. package/dist/browser/index.js.map +4 -4
  3. package/dist/cjs/index.js +3 -3
  4. package/dist/cjs/index.js.map +4 -4
  5. package/dist/esm/index.js +3 -3
  6. package/dist/esm/index.js.map +4 -4
  7. package/dist/src/chains/chain.enums.d.ts +7 -2
  8. package/dist/src/chains/chain.enums.js +5 -0
  9. package/dist/src/chains/chain.enums.js.map +1 -1
  10. package/dist/src/chains/index.js +6 -0
  11. package/dist/src/chains/index.js.map +1 -1
  12. package/dist/src/client/core-api/core-api-mapper.js +1 -0
  13. package/dist/src/client/core-api/core-api-mapper.js.map +1 -1
  14. package/dist/src/client/core-api/core-api.model.d.ts +1 -0
  15. package/dist/src/client/core-api/core-api.model.js.map +1 -1
  16. package/dist/src/configs/mainnet.js +1 -0
  17. package/dist/src/configs/mainnet.js.map +1 -1
  18. package/dist/src/index.d.ts +6 -4
  19. package/dist/src/index.js +5 -11
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/services/bridge/alg/index.d.ts +1 -0
  22. package/dist/src/services/bridge/alg/index.js +62 -38
  23. package/dist/src/services/bridge/alg/index.js.map +1 -1
  24. package/dist/src/services/bridge/index.js +5 -0
  25. package/dist/src/services/bridge/index.js.map +1 -1
  26. package/dist/src/services/bridge/models/bridge.model.d.ts +1 -0
  27. package/dist/src/services/bridge/models/bridge.model.js.map +1 -1
  28. package/dist/src/services/bridge/stx/index.d.ts +16 -0
  29. package/dist/src/services/bridge/stx/index.js +127 -0
  30. package/dist/src/services/bridge/stx/index.js.map +1 -0
  31. package/dist/src/services/bridge/utils.d.ts +3 -1
  32. package/dist/src/services/bridge/utils.js +23 -0
  33. package/dist/src/services/bridge/utils.js.map +1 -1
  34. package/dist/src/services/liquidity-pool/alg/index.js +10 -17
  35. package/dist/src/services/liquidity-pool/alg/index.js.map +1 -1
  36. package/dist/src/services/liquidity-pool/index.js +5 -0
  37. package/dist/src/services/liquidity-pool/index.js.map +1 -1
  38. package/dist/src/services/liquidity-pool/stx/index.d.ts +21 -0
  39. package/dist/src/services/liquidity-pool/stx/index.js +141 -0
  40. package/dist/src/services/liquidity-pool/stx/index.js.map +1 -0
  41. package/dist/src/services/models/alg/BridgeClient.d.ts +158 -133
  42. package/dist/src/services/models/alg/BridgeClient.js +182 -130
  43. package/dist/src/services/models/alg/BridgeClient.js.map +1 -1
  44. package/dist/src/services/models/alg/PaddingUtilClient.d.ts +639 -0
  45. package/dist/src/services/models/alg/PaddingUtilClient.js +425 -0
  46. package/dist/src/services/models/alg/PaddingUtilClient.js.map +1 -0
  47. package/dist/src/services/models/alg/PoolClient.d.ts +204 -201
  48. package/dist/src/services/models/alg/PoolClient.js +234 -215
  49. package/dist/src/services/models/alg/PoolClient.js.map +1 -1
  50. package/dist/src/services/models/index.d.ts +2 -1
  51. package/dist/src/services/models/index.js.map +1 -1
  52. package/dist/src/services/models/stx/clarigen-types.d.ts +657 -0
  53. package/dist/src/services/models/stx/clarigen-types.js +2296 -0
  54. package/dist/src/services/models/stx/clarigen-types.js.map +1 -0
  55. package/dist/src/services/token/index.js +5 -0
  56. package/dist/src/services/token/index.js.map +1 -1
  57. package/dist/src/services/token/stx/index.d.ts +20 -0
  58. package/dist/src/services/token/stx/index.js +59 -0
  59. package/dist/src/services/token/stx/index.js.map +1 -0
  60. package/dist/src/services/utils/alg/index.d.ts +1 -10
  61. package/dist/src/services/utils/alg/index.js +0 -20
  62. package/dist/src/services/utils/alg/index.js.map +1 -1
  63. package/dist/src/services/utils/stx/get-token-name.d.ts +2 -0
  64. package/dist/src/services/utils/stx/get-token-name.js +15 -0
  65. package/dist/src/services/utils/stx/get-token-name.js.map +1 -0
  66. package/dist/src/services/utils/stx/post-conditions.d.ts +3 -0
  67. package/dist/src/services/utils/stx/post-conditions.js +27 -0
  68. package/dist/src/services/utils/stx/post-conditions.js.map +1 -0
  69. package/dist/src/services/yield/index.js +4 -0
  70. package/dist/src/services/yield/index.js.map +1 -1
  71. package/dist/src/tokens-info/tokens-info.model.d.ts +4 -0
  72. package/dist/src/tokens-info/tokens-info.model.js.map +1 -1
  73. package/dist/src/version.d.ts +1 -1
  74. package/dist/src/version.js +1 -1
  75. package/dist/src/version.js.map +1 -1
  76. package/package.json +6 -2
@@ -1 +1 @@
1
- {"version":3,"file":"PoolClient.js","sourceRoot":"","sources":["../../../../../src/services/models/alg/PoolClient.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from \"@algorandfoundation/algokit-utils/types/algorand-client\";\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from \"@algorandfoundation/algokit-utils/types/app\";\nimport {\n Arc56Contract,\n getArc56ReturnValue,\n getABIStructFromABITuple,\n} from \"@algorandfoundation/algokit-utils/types/app-arc56\";\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from \"@algorandfoundation/algokit-utils/types/app-client\";\nimport {\n AppFactory as _AppFactory,\n AppFactoryAppClientParams,\n AppFactoryResolveAppClientByCreatorAndNameParams,\n AppFactoryDeployParams,\n AppFactoryParams,\n CreateSchema,\n} from \"@algorandfoundation/algokit-utils/types/app-factory\";\nimport {\n TransactionComposer,\n AppCallMethodCall,\n AppMethodCallTransactionArgument,\n SimulateOptions,\n RawSimulateOptions,\n SkipSignaturesSimulateOptions,\n} from \"@algorandfoundation/algokit-utils/types/composer\";\nimport {\n SendParams,\n SendSingleTransactionResult,\n SendAtomicTransactionComposerResults,\n} from \"@algorandfoundation/algokit-utils/types/transaction\";\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from \"algosdk\";\n\nexport const APP_SPEC: Arc56Contract = {\n name: \"Pool\",\n structs: {},\n methods: [\n {\n name: \"createApplication\",\n args: [\n { type: \"address\", name: \"owner\" },\n { type: \"address\", name: \"router\" },\n { type: \"uint64\", name: \"a\" },\n { type: \"uint64\", name: \"assetId\" },\n { type: \"uint64\", name: \"feeShareBP\" },\n { type: \"uint64\", name: \"balanceRatioMinBP\" },\n ],\n returns: { type: \"void\" },\n actions: { create: [\"NoOp\"], call: [] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"optInToApplication\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"OptIn\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"optInAsset\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n desc: \"Opt-in the application account to the ASA stored in `this.asset`.\\nThis performs an inner axfer of 0 to the app's own address.\\nCall once after deploy (or whenever you change the asset).\",\n events: [],\n recommendations: {},\n },\n {\n name: \"noop\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"deposit\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Deposit\",\n args: [\n { type: \"address\", name: \"to\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"withdraw\",\n args: [{ type: \"uint64\", name: \"amountLp\", desc: \"The Withdrawn amount\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Withdraw\",\n args: [\n { type: \"address\", name: \"from\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"swapToVUsd\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"amount\", desc: \"The amount of tokens to swap.\" },\n {\n type: \"bool\",\n name: \"zeroFee\",\n desc: \"When true it allows to swap without incurring any fees. It is intended for use with service\\naccounts.\",\n },\n ],\n returns: { type: \"uint64\", desc: \"returns the difference between the old and the new value of vUsdBalance\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"SwappedToVUsd\",\n args: [\n { type: \"address\", name: \"sender\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"swapFromVUsd\",\n args: [\n { type: \"address\", name: \"user\", desc: \"The address of the recipient.\" },\n { type: \"uint64\", name: \"amount\", desc: \"The amount of vUSD to swap.\" },\n {\n type: \"uint64\",\n name: \"receiveAmountMin\",\n desc: \"The minimum amount of tokens required to be received during the swap, otherwise the\\ntransaction reverts.\",\n },\n {\n type: \"bool\",\n name: \"zeroFee\",\n desc: \"When true it allows to swap without incurring any fees. It is intended for use with service\\naccounts.\",\n },\n ],\n returns: { type: \"uint64\", desc: \"returns the difference between the old and the new value of vUsdBalance\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"SwappedFromVUsd\",\n args: [\n { type: \"address\", name: \"recipient\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"setFeeShare\",\n args: [{ type: \"uint64\", name: \"feeShareBP\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"adjustTotalLpAmount\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Deposit\",\n args: [\n { type: \"address\", name: \"to\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"setBalanceRatioMinBP\",\n args: [{ type: \"uint64\", name: \"balanceRatioMinBP\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"stopDeposit\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"startDeposit\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"stopWithdraw\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"startWithdraw\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"setStopAuthority\",\n args: [{ type: \"address\", name: \"stopAuthority\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"setRouter\",\n args: [{ type: \"address\", name: \"router\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"claimRewards\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"setAdminFeeShare\",\n args: [{ type: \"uint64\", name: \"adminFeeShareBP\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"claimAdminFee\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"pendingReward\",\n args: [{ type: \"account\", name: \"user\" }],\n returns: { type: \"uint64\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: true,\n events: [],\n recommendations: {},\n },\n {\n name: \"decimals\",\n args: [],\n returns: { type: \"uint64\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: true,\n events: [],\n recommendations: {},\n },\n {\n name: \"transferOwnership\",\n args: [{ type: \"address\", name: \"newOwner\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n ],\n arcs: [22, 28],\n desc: \"4AD - D = 4A(x + y) - (D³ / 4xy)\\nX - is value of real stable token\\nY - is value of virtual usd\",\n networks: {},\n state: {\n schema: { global: { ints: 15, bytes: 4 }, local: { ints: 2, bytes: 0 } },\n keys: {\n global: {\n feeShareBP: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"ZmVlU2hhcmVCUA==\" },\n router: { keyType: \"AVMString\", valueType: \"address\", key: \"cm91dGVy\" },\n tokenBalance: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG9rZW5CYWxhbmNl\" },\n vUsdBalance: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dlVzZEJhbGFuY2U=\" },\n balanceRatioMinBP: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YmFsYW5jZVJhdGlvTWluQlA=\" },\n reserves: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"cmVzZXJ2ZXM=\" },\n a: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YQ==\" },\n d: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"ZA==\" },\n tokenAmountReduce: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG9rZW5BbW91bnRSZWR1Y2U=\" },\n tokenAmountIncrease: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG9rZW5BbW91bnRJbmNyZWFzZQ==\" },\n stopAuthority: { keyType: \"AVMString\", valueType: \"address\", key: \"c3RvcEF1dGhvcml0eQ==\" },\n canDeposit: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"Y2FuRGVwb3NpdA==\" },\n canWithdraw: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"Y2FuV2l0aGRyYXc=\" },\n asset: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YXNzZXQ=\" },\n adminFeeShareBP: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YWRtaW5GZWVTaGFyZUJQ\" },\n totalSupply: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG90YWxTdXBwbHk=\" },\n accRewardPerShareP: { keyType: \"AVMString\", valueType: \"AVMBytes\", key: \"YWNjUmV3YXJkUGVyU2hhcmVQ\" },\n adminFeeAmount: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YWRtaW5GZWVBbW91bnQ=\" },\n owner: { keyType: \"AVMString\", valueType: \"address\", key: \"b3duZXI=\" },\n },\n local: {\n balance: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YmFsYW5jZQ==\" },\n userRewardDebt: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dXNlclJld2FyZERlYnQ=\" },\n },\n box: {},\n },\n maps: { global: {}, local: {}, box: {} },\n },\n bareActions: { create: [], call: [] },\n sourceInfo: {\n approval: {\n sourceInfo: [\n { pc: [1446], errorMessage: '\"Pool: withdraw prohibited' },\n { pc: [1249], errorMessage: \"Asset must go to app\" },\n { pc: [1232], errorMessage: \"Asset txn missing\" },\n { pc: [1270], errorMessage: \"CloseTo not allowed\" },\n {\n pc: [\n 514, 529, 553, 577, 589, 605, 617, 632, 647, 659, 671, 683, 695, 711, 723, 739, 773, 803, 819, 831, 840,\n 865,\n ],\n errorMessage: \"OnCompletion is not NoOp\",\n },\n { pc: [853], errorMessage: \"OnCompletion is not OptIn\" },\n { pc: [3306], errorMessage: \"Only owner\" },\n { pc: [1216], errorMessage: \"Pool: deposit prohibited\" },\n { pc: [1141], errorMessage: \"Pool: is not stopAuthority\" },\n { pc: [1206], errorMessage: \"Pool: low token balance\" },\n { pc: [1182], errorMessage: \"Pool: low vUSD balance\" },\n { pc: [1131], errorMessage: \"Pool: only router\" },\n { pc: [1701, 1983], errorMessage: \"Pool: reserves\" },\n { pc: [2027], errorMessage: \"Pool: slippage\" },\n { pc: [2116, 2175], errorMessage: \"Pool: too large\" },\n { pc: [1280], errorMessage: \"Pool: too little\" },\n { pc: [1369], errorMessage: \"Pool: too much\" },\n { pc: [1723], errorMessage: \"Pool: zero D changes\" },\n { pc: [1693], errorMessage: \"Pool: zero changes\" },\n { pc: [1263], errorMessage: \"Rekey not allowed\" },\n { pc: [1468], errorMessage: \"RewardManager: not enough amount\" },\n { pc: [2994], errorMessage: \"RewardManager: too high\" },\n { pc: [1256], errorMessage: \"Wrong asset\" },\n { pc: [984], errorMessage: \"asset exists\" },\n { pc: [869], errorMessage: \"can only call when creating\" },\n {\n pc: [\n 517, 532, 556, 580, 592, 608, 620, 635, 650, 662, 674, 686, 698, 714, 726, 742, 776, 806, 822, 834, 843,\n 856,\n ],\n errorMessage: \"can only call when not creating\",\n },\n {\n pc: [\n 977, 1080, 1129, 1139, 1153, 1163, 1180, 1204, 1215, 1225, 1229, 1284, 1298, 1308, 1326, 1336, 1350, 1360,\n 1374, 1412, 1445, 1451, 1476, 1531, 1563, 1614, 1618, 1624, 1660, 1686, 1690, 1697, 1705, 1719, 1728, 1775,\n 1805, 1815, 1823, 1833, 1841, 1870, 1929, 1939, 1955, 1976, 1987, 2002, 2032, 2066, 2137, 2148, 2251, 2260,\n 2408, 2413, 2421, 2529, 2537, 2578, 2586, 2917, 2954, 3015, 3023, 3028, 3064, 3092, 3100, 3118, 3138, 3152,\n 3216, 3250, 3304,\n ],\n errorMessage: \"check GlobalState exists\",\n },\n { pc: [1463, 1500, 1516, 2906, 2934, 3058, 3078, 3164, 3186, 3201], errorMessage: \"check LocalState exists\" },\n { pc: [2626], errorMessage: \"n must be non-negative\" },\n { pc: [1395, 1426, 1642, 1674], errorMessage: \"overflow\" },\n { pc: [1242], errorMessage: \"transaction type is axfer\" },\n ],\n pcOffsetMethod: \"none\",\n },\n clear: { sourceInfo: [], pcOffsetMethod: \"none\" },\n },\n source: {\n approval:\n \"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggNCAxMDAwMAogICAgYnl0ZWNibG9jayAidG9rZW5CYWxhbmNlIiAidlVzZEJhbGFuY2UiICJhc3NldCIgInJlc2VydmVzIiAiYmFsYW5jZSIgInVzZXJSZXdhcmREZWJ0IiAiZCIgInRvdGFsU3VwcGx5IiAiYWNjUmV3YXJkUGVyU2hhcmVQIiAweDAxMDAwMDAwMDAwMDAwIDB4MDEgImFkbWluRmVlQW1vdW50IiAiY2FuRGVwb3NpdCIgImNhbldpdGhkcmF3IiAib3duZXIiICJmZWVTaGFyZUJQIiAiYmFsYW5jZVJhdGlvTWluQlAiIDB4MDIgImFkbWluRmVlU2hhcmVCUCIgMHgxNTFmN2M3NSAiYSIgInJvdXRlciIgInN0b3BBdXRob3JpdHkiICJ0b2tlbkFtb3VudFJlZHVjZSIgInRva2VuQW1vdW50SW5jcmVhc2UiIDB4YmE4MTgwNzYgMHgwMyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGJueiBtYWluX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIHB1c2hpbnQgMjAwMCAvLyAyMDAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBwdXNoYnl0ZXMgMHgKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MgogICAgLy8gY2FuRGVwb3NpdCA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAoKbWFpbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG4gTnVtQXBwQXJncwogICAgYnogbWFpbl9hZnRlcl9pZl9lbHNlQDMxCiAgICBwdXNoYnl0ZXNzIDB4NTE2ZDM0N2IgMHgwMWEzYTNmZiAweDc2MTBhNDYwIDB4ZTgzYTg3YWIgMHg5MmUwM2IxYyAweDIxZjFkZGZmIDB4ZDk3OGFkMTQgMHgwZDFiNGMwNiAweDc1YmY5YTI4IDB4ZjQ5M2Q3ZWQgMHg4ZDVjYjZkZiAweGZlMDRhNWNlIDB4MDI4ZTA4NTkgMHg0MWZjOTY2ZSAweGFiZjIwMDE0IDB4MDRiMTYxZjEgMHg2NjU5MWNjZiAweGE1YWU2YmQxIDB4YTA0YzViYzQgMHgzNjFiNjE1OSAweDMyYmJiMDExIDB4Yjg3NzllZTcgMHhlMTdiYWZiNCAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAib3B0SW5Ub0FwcGxpY2F0aW9uKCl2b2lkIiwgbWV0aG9kICJvcHRJbkFzc2V0KCl2b2lkIiwgbWV0aG9kICJub29wKCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJ3aXRoZHJhdyh1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWNjb3VudCl1aW50NjQiLCBtZXRob2QgImRlY2ltYWxzKCl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG1haW5fY3JlYXRlQXBwbGljYXRpb25fcm91dGVANSBtYWluX29wdEluVG9BcHBsaWNhdGlvbl9yb3V0ZUA2IG1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3IG1haW5fbm9vcF9yb3V0ZUA4IG1haW5fZGVwb3NpdF9yb3V0ZUA5IG1haW5fd2l0aGRyYXdfcm91dGVAMTAgbWFpbl9zd2FwVG9WVXNkX3JvdXRlQDExIG1haW5fc3dhcEZyb21WVXNkX3JvdXRlQDEyIG1haW5fc2V0RmVlU2hhcmVfcm91dGVAMTMgbWFpbl9hZGp1c3RUb3RhbExwQW1vdW50X3JvdXRlQDE0IG1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTUgbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNiBtYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNyBtYWluX3N0b3BXaXRoZHJhd19yb3V0ZUAxOCBtYWluX3N0YXJ0V2l0aGRyYXdfcm91dGVAMTkgbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwIG1haW5fc2V0Um91dGVyX3JvdXRlQDIxIG1haW5fY2xhaW1SZXdhcmRzX3JvdXRlQDIyIG1haW5fc2V0QWRtaW5GZWVTaGFyZV9yb3V0ZUAyMyBtYWluX2NsYWltQWRtaW5GZWVfcm91dGVAMjQgbWFpbl9wZW5kaW5nUmV3YXJkX3JvdXRlQDI1IG1haW5fZGVjaW1hbHNfcm91dGVAMjYgbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNwoKbWFpbl9hZnRlcl9pZl9lbHNlQDMxOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgaW50Y18wIC8vIDAKICAgIHJldHVybgoKbWFpbl90cmFuc2Zlck93bmVyc2hpcF9yb3V0ZUAyNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgY2FsbHN1YiB0cmFuc2Zlck93bmVyc2hpcAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9kZWNpbWFsc19yb3V0ZUAyNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5MQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIHB1c2hieXRlcyAweDE1MWY3Yzc1MDAwMDAwMDAwMDAwMDAwMwogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3BlbmRpbmdSZXdhcmRfcm91dGVAMjU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODYKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBidG9pCiAgICB0eG5hcyBBY2NvdW50cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2CiAgICAvLyBAYWJpbWV0aG9kKHsgcmVhZG9ubHk6IHRydWUgfSkKICAgIGNhbGxzdWIgcGVuZGluZ1Jld2FyZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fY2xhaW1BZG1pbkZlZV9yb3V0ZUAyNDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgY2xhaW1BZG1pbkZlZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRBZG1pbkZlZVNoYXJlX3JvdXRlQDIzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGNhbGxzdWIgc2V0QWRtaW5GZWVTaGFyZQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jbGFpbVJld2FyZHNfcm91dGVAMjI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTAKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIGNsYWltUmV3YXJkcwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRSb3V0ZXJfcm91dGVAMjE6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTcKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBzZXRSb3V0ZXIocm91dGVyOiBBZGRyZXNzKTogdm9pZCB7CiAgICBjYWxsc3ViIHNldFJvdXRlcgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRTdG9wQXV0aG9yaXR5X3JvdXRlQDIwOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzUyCiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGNhbGxzdWIgc2V0U3RvcEF1dGhvcml0eQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdGFydFdpdGhkcmF3X3JvdXRlQDE5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBzdGFydFdpdGhkcmF3KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0V2l0aGRyYXcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3RvcFdpdGhkcmF3X3JvdXRlQDE4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQyCiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcFdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N0YXJ0RGVwb3NpdF9yb3V0ZUAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzNwogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgIQogICAgYXNzZXJ0IC8vIE9uQ29tcGxldGlvbiBpcyBub3QgTm9PcAogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIHN0YXJ0RGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zdG9wRGVwb3NpdF9yb3V0ZUAxNjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMgogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgc3RvcERlcG9zaXQKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc2V0QmFsYW5jZVJhdGlvTWluQlBfcm91dGVAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjYKICAgIC8vIHNldEJhbGFuY2VSYXRpb01pbkJQKGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI2CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEJhbGFuY2VSYXRpb01pbkJQCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2FkanVzdFRvdGFsTHBBbW91bnRfcm91dGVAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTMKICAgIC8vIGFkanVzdFRvdGFsTHBBbW91bnQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgYWRqdXN0VG90YWxMcEFtb3VudAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9zZXRGZWVTaGFyZV9yb3V0ZUAxMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNwogICAgLy8gc2V0RmVlU2hhcmUoZmVlU2hhcmVCUDogdWludDY0KTogdm9pZCB7CiAgICBjYWxsc3ViIHNldEZlZVNoYXJlCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX3N3YXBGcm9tVlVzZF9yb3V0ZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDMKICAgIGJ0b2kKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDQKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OS0yNjQKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBjYWxsc3ViIHN3YXBGcm9tVlVzZAogICAgaXRvYgogICAgYnl0ZWMgMTkgLy8gMHgxNTFmN2M3NQogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fc3dhcFRvVlVzZF9yb3V0ZUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxMy0yMTcKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIG5vdCBjcmVhdGluZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgaW50Y18wIC8vIDAKICAgIGdldGJpdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgY2FsbHN1YiBzd2FwVG9WVXNkCiAgICBpdG9iCiAgICBieXRlYyAxOSAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl93aXRoZHJhd19yb3V0ZUAxMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzCiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGJ0b2kKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OAogICAgLy8gQGFiaW1ldGhvZCgpCiAgICBjYWxsc3ViIHdpdGhkcmF3CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgptYWluX2RlcG9zaXRfcm91dGVAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgZGVwb3NpdAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9ub29wX3JvdXRlQDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MgogICAgLy8gQGFiaW1ldGhvZCgpCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCm1haW5fb3B0SW5Bc3NldF9yb3V0ZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzcKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICAhCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYXNzZXJ0IC8vIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGNhbGxzdWIgb3B0SW5Bc3NldAogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY4CiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIGlzIG5vdCBPcHRJbgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgIGFzc2VydCAvLyBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBjYWxsc3ViIG9wdEluVG9BcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKbWFpbl9jcmVhdGVBcHBsaWNhdGlvbl9yb3V0ZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTUKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXRJZDogdWludDY0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gaXMgbm90IE5vT3AKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICAhCiAgICBhc3NlcnQgLy8gY2FuIG9ubHkgY2FsbCB3aGVuIGNyZWF0aW5nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMwogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo6YmlndWludFRvVWludDY0TW9kdWxvKHY6IGJ5dGVzKSAtPiB1aW50NjQ6CmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNgogICAgLy8gZXhwb3J0IGZ1bmN0aW9uIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBiaWd1aW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjI4CiAgICAvLyBjb25zdCBsZW4gPSBvcC5sZW4oYik7CiAgICBmcmFtZV9kaWcgLTEKICAgIGxlbgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMiAvLyA4CiAgICA+CiAgICBieiBiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgaW50Y18yIC8vIDgKICAgIC0KCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzAKICAgIC8vIGNvbnN0IGxhc3Q4ID0gYi5zbGljZShzdGFydCk7ICAgICAgICAgICAvLyBrZWVwIGxlYXN0LXNpZ25pZmljYW50IDggYnl0ZXMKICAgIGR1cAogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMwogICAgPj0KICAgIGRpZyAyCiAgICBzd2FwCiAgICBzZWxlY3QKICAgIGZyYW1lX2RpZyAtMQogICAgc3dhcAogICAgdW5jb3ZlciAyCiAgICBzdWJzdHJpbmczCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzEKICAgIC8vIHJldHVybiBvcC5idG9pKGxhc3Q4KTsgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY29udmVydCB0byB1aW50NjQKICAgIGJ0b2kKICAgIHN3YXAKICAgIHJldHN1YgoKYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyOQogICAgLy8gY29uc3Qgc3RhcnQ6IHVpbnQ2NCA9IGxlbiA+IDggPyAobGVuIC0gOCkgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBieXRlcywgcm91dGVyOiBieXRlcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCkgLT4gdm9pZDoKY3JlYXRlQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NQogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldElkOiB1aW50NjQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gNiAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZnJhbWVfZGlnIC02CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzgKICAgIC8vIHRoaXMuYXNzZXQudmFsdWUgPSBBc3NldChhc3NldElkKTsKICAgIGZyYW1lX2RpZyAtMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjAgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NwogICAgLy8gdGhpcy5hLnZhbHVlID0gYTsKICAgIGZyYW1lX2RpZyAtNAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwCiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIxIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1OAogICAgLy8gdGhpcy5yb3V0ZXIudmFsdWUgPSByb3V0ZXI7CiAgICBmcmFtZV9kaWcgLTUKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gcHJpdmF0ZSBzdG9wQXV0aG9yaXR5ID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBjYW4gcmVzdHJpY3QgZGVwb3NpdCBvciB3aXRoZHJhdyBvcGVyYXRpb25zCiAgICBieXRlYyAyMiAvLyAic3RvcEF1dGhvcml0eSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU5CiAgICAvLyB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUgPSBvd25lcjsKICAgIGZyYW1lX2RpZyAtNgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjMKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFzc2V0X3BhcmFtc19nZXQgQXNzZXREZWNpbWFscwogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBhc3NldCBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBTWVNURU1fUFJFQ0lTSU9OOiB1aW50NjQgPSAzOwogICAgcHVzaGludCAzIC8vIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgPgogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFNZU1RFTV9QUkVDSVNJT046IHVpbnQ2NCA9IDM7CiAgICBwdXNoaW50IDMgLy8gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICAtCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICBzd2FwCiAgICBleHAKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMAogICAgLy8gY29uc3QgU1lTVEVNX1BSRUNJU0lPTjogdWludDY0ID0gMzsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2NQogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZnJhbWVfZGlnIDAKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDI0IC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjUKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWUgPSBkZWNpbWFscyA8IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoU1lTVEVNX1BSRUNJU0lPTiAtIGRlY2ltYWxzKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDYKCmNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY0CiAgICAvLyB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlID0gZGVjaW1hbHMgPiBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKGRlY2ltYWxzIC0gU1lTVEVNX1BSRUNJU0lPTikgOiAwOwogICAgaW50Y18wIC8vIDAKICAgIGIgY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Ub0FwcGxpY2F0aW9uKCkgLT4gdm9pZDoKb3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIG9wdEluVG9BcHBsaWNhdGlvbigpOiB2b2lkIHsKICAgIHByb3RvIDAgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHN1cGVyLm9wdEluVG9BcHBsaWNhdGlvbihUeG4uc2VuZGVyKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQyCiAgICAvLyBpZiAoIXRoaXMuYmFsYW5jZSh0bykuaGFzVmFsdWUpIHsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQzCiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlID0gMDsKICAgIGZyYW1lX2RpZyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDMKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9sb2NhbF9wdXQKCm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGJ1cnkgMQogICAgYm56IG9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0NgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSAwOwogICAgZnJhbWVfZGlnIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKb3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9wdEluQXNzZXQoKSAtPiB2b2lkOgpvcHRJbkFzc2V0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODcKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIC8vICAgLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg1CiAgICAvLyBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBhc3NldEFtb3VudDogMCwKICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODEtODYKICAgIC8vIGl0eG4KICAgIC8vICAgLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgICBhc3NldEFtb3VudDogMCwKICAgIC8vICAgICBhc3NldFJlY2VpdmVyOiBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywKICAgIC8vICAgfSkKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjgxLTg3CiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4OQogICAgLy8gbG9nKCdQb29sOiBvcHQtaW4gY29tcGxldGVkJyk7CiAgICBwdXNoYnl0ZXMgIlBvb2w6IG9wdC1pbiBjb21wbGV0ZWQiCiAgICBsb2cKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OTcKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcm91dGVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjEgLy8gInJvdXRlciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5NwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMucm91dGVyLnZhbHVlLmJ5dGVzLCAnUG9vbDogb25seSByb3V0ZXInKTsKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogb25seSByb3V0ZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlTdG9wQXV0aG9yaXR5KCkgLT4gdm9pZDoKb25seVN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDEKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgdHhuIFNlbmRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDIyIC8vICJzdG9wQXV0aG9yaXR5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwMQogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIFBvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC52YWxpZGF0ZUJhbGFuY2VSYXRpbygpIC0+IHZvaWQ6CnZhbGlkYXRlQmFsYW5jZVJhdGlvOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA3CiAgICAvLyBwcml2YXRlIHZhbGlkYXRlQmFsYW5jZVJhdGlvKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTAKICAgIC8vIGlmICh0b2tlbkJhbGFuY2UgPiB2VXNkQmFsYW5jZSkgewogICAgPgogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgZnJhbWVfZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMQogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDAKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTExCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICA+PQogICAgYXNzZXJ0IC8vIFBvb2w6IGxvdyB2VVNEIGJhbGFuY2UKCnZhbGlkYXRlQmFsYW5jZVJhdGlvX2FmdGVyX2lmX2Vsc2VANToKICAgIHJldHN1YgoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTIKICAgIC8vIH0gZWxzZSBpZiAodG9rZW5CYWxhbmNlIDwgdlVzZEJhbGFuY2UpIHsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMQogICAgPAogICAgYnogdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTMKICAgIC8vIGFzc2VydCgodG9rZW5CYWxhbmNlICogQlApIC8gdlVzZEJhbGFuY2UgPj0gdGhpcy5iYWxhbmNlUmF0aW9NaW5CUC52YWx1ZSwgJ1Bvb2w6IGxvdyB0b2tlbiBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgKgogICAgZnJhbWVfZGlnIDEKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzCiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTEzCiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgPj0KICAgIGFzc2VydCAvLyBQb29sOiBsb3cgdG9rZW4gYmFsYW5jZQogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdCgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjktMTMwCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGRlcG9zaXQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDEyIC8vICJjYW5EZXBvc2l0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExOAogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXNzZXJ0IC8vIFBvb2w6IGRlcG9zaXQgcHJvaGliaXRlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MzYKICAgIC8vIGFzc2VydChUeG4uZ3JvdXBJbmRleCA+IDAsIGBBc3NldCB0eG4gbWlzc2luZ2ApOwogICAgdHhuIEdyb3VwSW5kZXgKICAgIGFzc2VydCAvLyBBc3NldCB0eG4gbWlzc2luZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjM5CiAgICAvLyBjb25zdCBwcmV2SWR4OiB1aW50NjQgPSBUeG4uZ3JvdXBJbmRleCAtIDE7CiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0MQogICAgLy8gY29uc3QgcGF5ID0gZ3R4bi5Bc3NldFRyYW5zZmVyVHhuKHByZXZJZHgpOwogICAgZHVwCiAgICBndHhucyBUeXBlRW51bQogICAgaW50Y18zIC8vIGF4ZmVyCiAgICA9PQogICAgYXNzZXJ0IC8vIHRyYW5zYWN0aW9uIHR5cGUgaXMgYXhmZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0NAogICAgLy8gYXNzZXJ0KHBheS5hc3NldFJlY2VpdmVyID09PSBHbG9iYWwuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcywgYEFzc2V0IG11c3QgZ28gdG8gYXBwYCk7CiAgICBkdXAKICAgIGd0eG5zIEFzc2V0UmVjZWl2ZXIKICAgIGdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIEFzc2V0IG11c3QgZ28gdG8gYXBwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6NDUKICAgIC8vIGFzc2VydChwYXkueGZlckFzc2V0LmlkID09PSBhc3NldElkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGR1cAogICAgZ3R4bnMgWGZlckFzc2V0CiAgICB1bmNvdmVyIDIKICAgID09CiAgICBhc3NlcnQgLy8gV3JvbmcgYXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OAogICAgLy8gYXNzZXJ0KHBheS5yZWtleVRvID09PSBHbG9iYWwuemVyb0FkZHJlc3MsIGBSZWtleSBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBSZWtleVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gUmVrZXkgbm90IGFsbG93ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czo0OQogICAgLy8gYXNzZXJ0KHBheS5hc3NldENsb3NlVG8gPT09IEdsb2JhbC56ZXJvQWRkcmVzcywgYENsb3NlVG8gbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRDbG9zZVRvCiAgICBnbG9iYWwgWmVyb0FkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQ2xvc2VUbyBub3QgYWxsb3dlZAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjUwCiAgICAvLyByZXR1cm4gcGF5LmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNgogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNwogICAgLy8gYXNzZXJ0KGFtb3VudFNQID4gMCwgJ1Bvb2w6IHRvbyBsaXR0bGUnKTsKICAgIGR1cAogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsaXR0bGUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciA0CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDUKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDYKICAgIC8vIGlmIChvbGREID09PSAwIHx8IG9sZEJhbGFuY2UgPT09IDApIHsKICAgIGJ6IGRlcG9zaXRfaWZfYm9keUAyCiAgICBmcmFtZV9kaWcgNAogICAgYm56IGRlcG9zaXRfZWxzZV9ib2R5QDMKCmRlcG9zaXRfaWZfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQ4CiAgICAvLyBjb25zdCBoYWxmQW1vdW50OiB1aW50NjQgPSBhbW91bnRTUCA+PiAxOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaHIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNDkKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGhhbGZBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTAKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU4CiAgICAvLyB0aGlzLmRlcG9zaXRMcChUeG4uc2VuZGVyLCB0aGlzLmQudmFsdWUgLSBvbGREKTsKICAgIHR4biBTZW5kZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1OAogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgY2FsbHN1YiBkZXBvc2l0THAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMQogICAgLy8gY29uc3QgTUFYX1RPS0VOX0JBTEFOQ0U6IHVpbnQ2NCA9IDIgKiogNDA7IC8vIE1heCBwb3NzaWJsZSB0b2tlbiBiYWxhbmNlCiAgICBwdXNoaW50IDEwOTk1MTE2Mjc3NzYgLy8gMTA5OTUxMTYyNzc3NgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYwCiAgICAvLyBhc3NlcnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUgPCBNQVhfVE9LRU5fQkFMQU5DRSwgJ1Bvb2w6IHRvbyBtdWNoJyk7CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIHJldHN1YgoKZGVwb3NpdF9lbHNlX2JvZHlAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMQogICAgaXRvYgogICAgZnJhbWVfZGlnIDIKICAgIGl0b2IKICAgIGRpZyAxCiAgICBiKgogICAgZnJhbWVfZGlnIDQKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICBpbnRjXzIgLy8gOAogICAgYnplcm8KICAgIHN3YXAKICAgIGRpZyAxCiAgICBifAogICAgYnRvaQogICAgdW5jb3ZlciA0CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MwogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1NAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5uYXRpdmU7CiAgICBmcmFtZV9kaWcgMwogICAgaXRvYgogICAgdW5jb3ZlciA0CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIGIgZGVwb3NpdF9hZnRlcl9pZl9lbHNlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdyhhbW91bnRMcDogdWludDY0KSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OC0xNjkKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gd2l0aGRyYXcoYW1vdW50THA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTIyCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhc3NlcnQgLy8gIlBvb2w6IHdpdGhkcmF3IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA2IC8vICJkIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MwogICAgLy8gdGhpcy53aXRoZHJhd0xwKFR4bi5zZW5kZXIsIGFtb3VudExwKTsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI2CiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNwogICAgLy8gYXNzZXJ0KHVzZXJMcEFtb3VudCA+PSBscEFtb3VudCwgJ1Jld2FyZE1hbmFnZXI6IG5vdCBlbm91Z2ggYW1vdW50Jyk7CiAgICBkdXAKICAgIGZyYW1lX2RpZyAtMQogICAgPj0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjkKICAgIC8vIGxldCBwZW5kaW5nOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIHBlbmRpbmcgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAxCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTMxCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBmcmFtZV9idXJ5IDQKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzMKICAgIC8vIHVzZXJMcEFtb3VudCAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM0CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgZGlnIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzQKICAgIC8vIHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNgogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZSA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAzCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzYKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQoZnJvbSkudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQIC8gUF9TQ0FMRSk7CiAgICBzd2FwCiAgICBhcHBfbG9jYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGZyYW1lX2RpZyA0CiAgICBieiB3aXRoZHJhd19hZnRlcl9pZl9lbHNlQDkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDQKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzgKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIGVtaXQ8UmV3YXJkc0NsYWltZWQ+KHsgdXNlcjogbmV3IEFkZHJlc3MoZnJvbSksIHBlbmRpbmcgfSk7CiAgICBpdG9iCiAgICBjb25jYXQKICAgIGJ5dGVjIDI1IC8vIG1ldGhvZCAiUmV3YXJkc0NsYWltZWQoYWRkcmVzcyx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKCndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxNDEKICAgIC8vIGVtaXQ8V2l0aGRyYXc+KHsgZnJvbTogbmV3IEFkZHJlc3MoZnJvbSksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMQogICAgZGlnIDEKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4ZDNhZmE0ZjEgLy8gbWV0aG9kICJXaXRoZHJhdyhhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgxCiAgICAvLyBjb25zdCBvbGRCYWxhbmNlOiB1aW50NjQgPSAodG9rZW5CYWxhbmNlICsgdlVzZEJhbGFuY2UpOwogICAgZHVwMgogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgMwogICAgaXRvYgogICAgZGlnIDQKICAgIGIqCiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIGludGNfMiAvLyA4CiAgICBiemVybwogICAgc3dhcAogICAgZGlnIDEKICAgIGJ8CiAgICBidG9pCiAgICB1bmNvdmVyIDMKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSAtPSBuZXcgVWludE42NCgoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50TjY0KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLm5hdGl2ZTsKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnRONjQoKEJpZ1VpbnQoYW1vdW50THApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkubmF0aXZlOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgICsKICAgID4KICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIGNoYW5nZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTg4CiAgICAvLyBhc3NlcnQoYW1vdW50THAgPD0gdGhpcy5yZXNlcnZlcy52YWx1ZSwgJ1Bvb2w6IHJlc2VydmVzJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogcmVzZXJ2ZXMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTkxCiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IGFtb3VudExwOwogICAgZnJhbWVfZGlnIC0xCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMyAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTEKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk0CiAgICAvLyB0aGlzLnVwZGF0ZUQoKTsKICAgIGNhbGxzdWIgdXBkYXRlRAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk1CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBmcmFtZV9kaWcgMAogICAgPAogICAgYXNzZXJ0IC8vIFBvb2w6IHplcm8gRCBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTk5CiAgICAvLyBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIGZyYW1lX2RpZyAtMQogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDAKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICB0eG4gU2VuZGVyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxOTctMjAxCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgLy8gICBhc3NldFJlY2VpdmVyOiBUeG4uc2VuZGVyLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcFRvVlVzZCh1c2VyOiBieXRlcywgYW1vdW50OiB1aW50NjQsIHplcm9GZWU6IHVpbnQ2NCkgLT4gdWludDY0Ogpzd2FwVG9WVXNkOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjEzLTIxNwogICAgLy8gc3dhcFRvVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gMyAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxOAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMAogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjIwLTIyMQogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgZHVwbiAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBmcmFtZV9kaWcgLTIKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjMKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM5CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNAogICAgLy8gZmVlID0gKGFtb3VudCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGZyYW1lX2RpZyAtMgogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI0CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgLwogICAgZnJhbWVfYnVyeSAyCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyNgogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGZyYW1lX2RpZyAyCiAgICAtCiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjgKICAgIC8vIGZlZSA9IGFtb3VudCAtIHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRJbik7CiAgICBkdXAKICAgIGNhbGxzdWIgZnJvbVN5c3RlbVByZWNpc2lvbgogICAgZnJhbWVfZGlnIC0yCiAgICBzd2FwCiAgICAtCiAgICBmcmFtZV9idXJ5IDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzEKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgZGlnIDEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjMxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18zIC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM0CiAgICAvLyBjb25zdCB2VXNkTmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlKTsKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjM1CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIDwKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzNgogICAgLy8gcmVzdWx0ID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSAtIHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgLQogICAgZnJhbWVfYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOAogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA9IHZVc2ROZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzOQogICAgLy8gdGhpcy5hZGRSZXdhcmRzKGZlZSk7CiAgICBmcmFtZV9kaWcgMgogICAgZHVwCiAgICBjYWxsc3ViIGFkZFJld2FyZHMKICAgIGZyYW1lX2J1cnkgMwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2J1cnkgNAoKc3dhcFRvVlVzZF9hZnRlcl9pZl9lbHNlQDY6CiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDIKICAgIC8vIGVtaXQ8U3dhcHBlZFRvVlVzZD4oeyBzZW5kZXI6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIGFtb3VudCwgdlVzZEFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMwogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHgyYmJiZWNhMyAvLyBtZXRob2QgIlN3YXBwZWRUb1ZVc2QoYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpIgogICAgc3dhcAogICAgY29uY2F0CiAgICBsb2cKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NAogICAgLy8gdGhpcy52YWxpZGF0ZUJhbGFuY2VSYXRpbygpOwogICAgY2FsbHN1YiB2YWxpZGF0ZUJhbGFuY2VSYXRpbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjQ1CiAgICAvLyByZXR1cm4gcmVzdWx0OwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zd2FwRnJvbVZVc2QodXNlcjogYnl0ZXMsIGFtb3VudDogdWludDY0LCByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsIHplcm9GZWU6IHVpbnQ2NCkgLT4gdWludDY0Ogpzd2FwRnJvbVZVc2Q6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTktMjY0CiAgICAvLyBzd2FwRnJvbVZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICByZWNlaXZlQW1vdW50TWluOiB1aW50NjQsCiAgICAvLyAgIHplcm9GZWU6IGJvb2xlYW4sCiAgICAvLyApOiB1aW50NjQgewogICAgcHJvdG8gNCAxCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY1CiAgICAvLyB0aGlzLm9ubHlSb3V0ZXIoKTsKICAgIGNhbGxzdWIgb25seVJvdXRlcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBsZXQgcmVzdWx0U1A6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2OC0yNjkKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyBpZiAoYW1vdW50ID4gMCkgewogICAgZnJhbWVfZGlnIC0zCiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTMKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyCiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3MQogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzIKICAgIC8vIGNvbnN0IG5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxCiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGZyYW1lX2J1cnkgMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjc0CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzUKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICAtCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjc2CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBmcmFtZV9idXJ5IDMKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MAogICAgLy8gYXNzZXJ0KHJlc3VsdFNQIDw9IHRoaXMucmVzZXJ2ZXMudmFsdWUsICdQb29sOiByZXNlcnZlcycpOwogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzMgLy8gInJlc2VydmVzIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSByZXN1bHRTUDsKICAgIHN3YXAKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18zIC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4MgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSByZXN1bHRTUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyODMKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZnJhbWVfZGlnIC0xCiAgICBibnogc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mjg0CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgZnJhbWVfZGlnIDMKICAgICoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxOQogICAgLy8gZXhwb3J0IGNvbnN0IEJQOiB1aW50NjQgPSAxMF8wMDA7CiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4NAogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIC8KICAgIGZyYW1lX2J1cnkgNAoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4NwogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgNAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI4OQogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgPSBuZXdBbW91bnQ7CiAgICBmcmFtZV9kaWcgMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MAogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZnJhbWVfZGlnIC0yCiAgICA+PQogICAgYXNzZXJ0IC8vIFBvb2w6IHNsaXBwYWdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyOTEtMjk1CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiByZXN1bHQsCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IHVzZXIubmF0aXZlLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC00CiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjkxLTI5NQogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogcmVzdWx0LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB1c2VyLm5hdGl2ZSwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaW50Y18zIC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NgogICAgLy8gdGhpcy5hZGRSZXdhcmRzKGZlZSk7CiAgICBkaWcgMQogICAgY2FsbHN1YiBhZGRSZXdhcmRzCiAgICBmcmFtZV9idXJ5IDYKICAgIGZyYW1lX2J1cnkgNQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgNgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBmcmFtZV9kaWcgLTMKICAgIGl0b2IKICAgIGRpZyAyCiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtNAogICAgdW5jb3ZlciA0CiAgICBjb25jYXQKICAgIHVuY292ZXIgMwogICAgY29uY2F0CiAgICB1bmNvdmVyIDIKICAgIGNvbmNhdAogICAgc3dhcAogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2YxZDU0MiAvLyBtZXRob2QgIlN3YXBwZWRGcm9tVlVzZChhZGRyZXNzLHVpbnQ2NCx1aW50NjQsdWludDY0LHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzAwCiAgICAvLyB0aGlzLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCk7CiAgICBjYWxsc3ViIHZhbGlkYXRlQmFsYW5jZVJhdGlvCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDEKICAgIC8vIHJldHVybiByZXN1bHQ7CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA5CiAgICAvLyBhc3NlcnQoZmVlU2hhcmVCUCA8PSBCUCwgJ1Bvb2w6IHRvbyBsYXJnZScpOwogICAgZnJhbWVfZGlnIC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTkKICAgIC8vIGV4cG9ydCBjb25zdCBCUDogdWludDY0ID0gMTBfMDAwOwogICAgaW50YyA0IC8vIDEwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDkKICAgIC8vIGFzc2VydChmZWVTaGFyZUJQIDw9IEJQLCAnUG9vbDogdG9vIGxhcmdlJyk7CiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxMAogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnQoKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzEzCiAgICAvLyBhZGp1c3RUb3RhbExwQW1vdW50KCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTQKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDYgLy8gImQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgY292ZXIgMwogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE4CiAgICAvLyBpZiAoZCA+IHRvdGFsU3VwcGx5KSB7CiAgICA+CiAgICBieiBhZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE5CiAgICAvLyB0aGlzLmRlcG9zaXRMcChUeG4uc2VuZGVyLCBkIC0gdG90YWxTdXBwbHkpOwogICAgdHhuIFNlbmRlcgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICAtCiAgICBjYWxsc3ViIGRlcG9zaXRMcAoKYWRqdXN0VG90YWxMcEFtb3VudF9hZnRlcl9pZl9lbHNlQDI6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KSAtPiB2b2lkOgpzZXRCYWxhbmNlUmF0aW9NaW5CUDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNgogICAgLy8gc2V0QmFsYW5jZVJhdGlvTWluQlAoYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI4CiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIDw9CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxhcmdlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MwogICAgLy8gYmFsYW5jZVJhdGlvTWluQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNiAvLyAiYmFsYW5jZVJhdGlvTWluQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjkKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BEZXBvc2l0KCkgLT4gdm9pZDoKc3RvcERlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzMKICAgIC8vIHRoaXMub25seVN0b3BBdXRob3JpdHkoKTsKICAgIGNhbGxzdWIgb25seVN0b3BBdXRob3JpdHkKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUyCiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzQKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zdGFydERlcG9zaXQoKSAtPiB2b2lkOgpzdGFydERlcG9zaXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzOQogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcFdpdGhkcmF3KCkgLT4gdm9pZDoKc3RvcFdpdGhkcmF3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQzCiAgICAvLyB0aGlzLm9ubHlTdG9wQXV0aG9yaXR5KCk7CiAgICBjYWxsc3ViIG9ubHlTdG9wQXV0aG9yaXR5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NAogICAgLy8gdGhpcy5jYW5XaXRoZHJhdy52YWx1ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zdGFydFdpdGhkcmF3KCkgLT4gdm9pZDoKc3RhcnRXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gY2FuV2l0aGRyYXcgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyB3aXRoZHJhd24gb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDEzIC8vICJjYW5XaXRoZHJhdyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0OQogICAgLy8gdGhpcy5jYW5XaXRoZHJhdy52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogYnl0ZXMpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTIKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjIgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXIocm91dGVyOiBieXRlcykgLT4gdm9pZDoKc2V0Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU3CiAgICAvLyBzZXRSb3V0ZXIocm91dGVyOiBBZGRyZXNzKTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM1OAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MAogICAgLy8gcm91dGVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAyMSAvLyAicm91dGVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU5CiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIGZyYW1lX2RpZyAtMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmdldFkoeDogdWludDY0KSAtPiB1aW50NjQ6CmdldFk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjUKICAgIC8vIHByaXZhdGUgZ2V0WSh4OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjYKICAgIC8vIGNvbnN0IHhfID0gQmlnVWludCh4KTsKICAgIGZyYW1lX2RpZyAtMQogICAgaXRvYgogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjcKICAgIC8vIGNvbnN0IGRfID0gQmlnVWludCh0aGlzLmQudmFsdWUpOwogICAgaXRvYgogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NQogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMCAvLyAiYSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNjgKICAgIC8vIGNvbnN0IGE0ID0gQmlnVWludCh0aGlzLmEudmFsdWUgPDwgMik7CiAgICBwdXNoaW50IDIgLy8gMgogICAgc2hsCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gY29uc3QgYTggPSBCaWdVaW50KGE0ICogMm4pOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgYioKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3MQogICAgLy8gY29uc3QgZE1pbnVzWElzUG9zaXRpdmUgPSBkXyA+PSB4XzsKICAgIGI8PQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIGNvbnN0IGRNaW51c1hBYnM6IGJpZ3VpbnQgPSBkTWludXNYSXNQb3NpdGl2ZSA/IChkXyAtIHhfKSA6ICh4XyAtIGRfKTsKICAgIGJ6IGdldFlfdGVybmFyeV9mYWxzZUAyCiAgICBmcmFtZV9kaWcgMwogICAgZnJhbWVfZGlnIDIKICAgIGItCgpnZXRZX3Rlcm5hcnlfbWVyZ2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NAogICAgLy8gY29uc3QgYTRCeURNaW51c1hBYnM6IGJpZ3VpbnQgPSBhNCAqIGRNaW51c1hBYnM7CiAgICBmcmFtZV9kaWcgNAogICAgYioKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc5CiAgICAvLyBpZiAoZE1pbnVzWElzUG9zaXRpdmUpIHsKICAgIGZyYW1lX2RpZyA2CiAgICBieiBnZXRZX2Vsc2VfYm9keUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIGlmIChhNEJ5RE1pbnVzWEFicyA+PSBkXykgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAzCiAgICBiPj0KICAgIGJ6IGdldFlfZWxzZV9ib2R5QDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4MQogICAgLy8gcGFydDFBYnMgPSBhNEJ5RE1pbnVzWEFicyAtIGRfOwogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODIKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQoKZ2V0WV9hZnRlcl9pZl9lbHNlQDk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTMKICAgIC8vIGNvbnN0IHBhcnQyOiBiaWd1aW50ID0gQmlnVWludCh4KSAqIChhNCAqIGRfICogZF8gKiBkXyArIHhfICogKHBhcnQxQWJzICogcGFydDFBYnMpKTsKICAgIGZyYW1lX2RpZyA0CiAgICBmcmFtZV9kaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBiKgogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGZyYW1lX2RpZyAyCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYioKICAgIHVuY292ZXIgMgogICAgYisKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTQKICAgIC8vIGxldCBudW1lcmF0b3I6IGJpZ3VpbnQgPSB0aGlzLnNxcnQocGFydDIpOwogICAgY2FsbHN1YiBzcXJ0CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTcKICAgIC8vIGlmIChwYXJ0MUlzUG9zaXRpdmUpIHsKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDExCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTgKICAgIC8vIG51bWVyYXRvciArPSB4XyAqIHBhcnQxQWJzOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAxCiAgICBiKgogICAgYisKCmdldFlfYWZ0ZXJfaWZfZWxzZUAxMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhudW1lcmF0b3IgLyAoYTggKiB4XykgKyAxbik7IC8vICsxIHRvIG9mZnNldCByb3VuZGluZyBlcnJvcnMKICAgIGZyYW1lX2RpZyA1CiAgICBmcmFtZV9kaWcgMgogICAgYioKICAgIGIvCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpnZXRZX2Vsc2VfYm9keUAxMToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gbnVtZXJhdG9yIC09IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiLQogICAgYiBnZXRZX2FmdGVyX2lmX2Vsc2VAMTIKCmdldFlfZWxzZV9ib2R5QDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHBhcnQxQWJzID0gZF8gLSBhNEJ5RE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMAogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg1CiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX2Vsc2VfYm9keUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg4CiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzICsgZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGIrCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYiBnZXRZX2FmdGVyX2lmX2Vsc2VAOQoKZ2V0WV90ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzIKICAgIC8vIGNvbnN0IGRNaW51c1hBYnM6IGJpZ3VpbnQgPSBkTWludXNYSXNQb3NpdGl2ZSA/IChkXyAtIHhfKSA6ICh4XyAtIGRfKTsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMwogICAgYi0KICAgIGIgZ2V0WV90ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC51cGRhdGVEKCkgLT4gdm9pZDoKdXBkYXRlRDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNwogICAgLy8gcHJpdmF0ZSB1cGRhdGVEKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MQogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA4CiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MgogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwOQogICAgLy8gY29uc3QgeSA9IEJpZ1VpbnQodGhpcy52VXNkQmFsYW5jZS52YWx1ZSk7CiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTQKICAgIC8vIGNvbnN0IHh5OiBiaWd1aW50ID0geCAqIHk7CiAgICBkdXAyCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjAgLy8gImEiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDE1CiAgICAvLyBjb25zdCBhXyA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlKTsKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNwogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxOQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyMQogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjIKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyMwogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjQKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjgKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjYKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzEKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAyMyAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50SW5jcmVhc2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjQgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM1CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiB0b1N5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYW1vdW50IC8gdG9rZW5BbW91bnRSZWR1Y2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAwCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MzcKICAgIC8vIH0gZWxzZSBpZiAodG9rZW5BbW91bnRJbmNyZWFzZSA+IDApIHsKICAgIGZyYW1lX2RpZyAxCiAgICBieiB0b1N5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzOAogICAgLy8gcmV0dXJuIGFtb3VudCAqIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAqCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyByZXR1cm4gYW1vdW50OwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKZnJvbVN5c3RlbVByZWNpc2lvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MwogICAgLy8gcHJpdmF0ZSBmcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDI0IC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQ4CiAgICAvLyByZXR1cm4gYW1vdW50ICogdG9rZW5BbW91bnRSZWR1Y2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAwCiAgICAqCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gfSBlbHNlIGlmICh0b2tlbkFtb3VudEluY3JlYXNlID4gMCkgewogICAgZnJhbWVfZGlnIDEKICAgIGJ6IGZyb21TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTAKICAgIC8vIHJldHVybiBhbW91bnQgLyB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmZyb21TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUyCiAgICAvLyByZXR1cm4gYW1vdW50OwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNxcnQobjogYnl0ZXMpIC0+IGJ5dGVzOgpzcXJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDU1CiAgICAvLyBwcml2YXRlIHNxcnQobjogYmlndWludCk6IGJpZ3VpbnQgewogICAgcHJvdG8gMSAxCiAgICBpbnRjXzAgLy8gMAogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGFzc2VydChuID4gMG4sICduIG11c3QgYmUgbm9uLW5lZ2F0aXZlJyk7CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj4KICAgIGFzc2VydCAvLyBuIG11c3QgYmUgbm9uLW5lZ2F0aXZlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTcKICAgIC8vIGlmIChuID09PSAwbikgcmV0dXJuIDBuOwogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDIKICAgIHB1c2hieXRlcyAweAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnNxcnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDU4CiAgICAvLyBpZiAobiA8PSAzbikgcmV0dXJuIDFuOwogICAgZnJhbWVfZGlnIC0xCiAgICBieXRlYyAyNiAvLyAweDAzCiAgICBiPD0KICAgIGJ6IHNxcnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjEKICAgIC8vIGNvbnN0IGJsID0gYml0TGVuZ3RoKEJ5dGVzKG4pKTsKICAgIGZyYW1lX2RpZyAtMQogICAgYml0bGVuCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjIKICAgIC8vIGxldCB3aWRlID0gZXhwdygyLCAoYmwgKyAxKSAvIDIpOwogICAgaW50Y18xIC8vIDEKICAgICsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICAvCiAgICBwdXNoaW50IDIgLy8gMgogICAgc3dhcAogICAgZXhwdwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYzCiAgICAvLyBjb25zdCBoaSA9IEJpZ1VpbnQod2lkZVswXSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IGxvID0gQmlnVWludCh3aWRlWzFdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NQogICAgLy8gbGV0IHg6IGJpZ3VpbnQgPSBoaSAqIFNISUZUNjQgKyBsbzsKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyCiAgICAvLyBjb25zdCBTSElGVDY0OiBiaWd1aW50ID0gMTg0NDY3NDQwNzM3MDk1NTE2MTZuOyAvLyAyXjY0CiAgICBieXRlYyAyNyAvLyAweDAxMDAwMDAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgYioKICAgIGIrCiAgICBkdXAKICAgIGZyYW1lX2J1cnkgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY4CiAgICAvLyBsZXQgeTogYmlndWludCA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGRpZyAxCiAgICBiLwogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKCnNxcnRfd2hpbGVfdG9wQDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjkKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgZnJhbWVfZGlnIDEKICAgIGZyYW1lX2RpZyAwCiAgICBiPAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5LTQ3MgogICAgLy8gd2hpbGUgKHkgPCB4KSB7CiAgICAvLyAgIHggPSB5OwogICAgLy8gICB5ID0gKHggKyBuIC8geCkgLyAybjsKICAgIC8vIH0KICAgIGJ6IHNxcnRfYWZ0ZXJfd2hpbGVANwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcxCiAgICAvLyB5ID0gKHggKyBuIC8geCkgLyAybjsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYi8KICAgIGRpZyAxCiAgICBiKwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgYi8KICAgIGZyYW1lX2J1cnkgMQogICAgZnJhbWVfYnVyeSAwCiAgICBiIHNxcnRfd2hpbGVfdG9wQDUKCnNxcnRfYWZ0ZXJfd2hpbGVANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MwogICAgLy8gcmV0dXJuIHg7CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jYnJ0KG46IGJ5dGVzKSAtPiB1aW50NjQ6CmNicnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzYKICAgIC8vIHByaXZhdGUgY2JydChuOiBiaWd1aW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cG4gMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc3CiAgICAvLyBpZiAobiA9PT0gMG4pIHJldHVybiAwOwogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYnogY2JydF9hZnRlcl9pZl9lbHNlQDIKICAgIGludGNfMCAvLyAwCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKY2JydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzgKICAgIC8vIGlmIChuIDwgOG4pIHJldHVybiAxOwogICAgZnJhbWVfZGlnIC0xCiAgICBwdXNoYnl0ZXMgMHgwOAogICAgYjwKICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUA0CiAgICBpbnRjXzEgLy8gMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyBjb25zdCBibCA9IGJpdExlbmd0aChCeXRlcyhuKSk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGJpdGxlbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgyCiAgICAvLyBsZXQgd2lkZSA9IGV4cHcoMiwgKGJsICsgMikgLyAzKTsKICAgIHB1c2hpbnQgMiAvLyAyCiAgICArCiAgICBwdXNoaW50IDMgLy8gMwogICAgLwogICAgcHVzaGludCAyIC8vIDIKICAgIHN3YXAKICAgIGV4cHcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MwogICAgLy8gY29uc3QgaGkgPSBCaWdVaW50KHdpZGVbMF0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDg0CiAgICAvLyBjb25zdCBsbyA9IEJpZ1VpbnQod2lkZVsxXSk7CiAgICBzd2FwCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODUKICAgIC8vIGxldCB4OiBiaWd1aW50ID0gaGkgKiBTSElGVDY0ICsgbG87CiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMgogICAgLy8gY29uc3QgU0hJRlQ2NDogYmlndWludCA9IDE4NDQ2NzQ0MDczNzA5NTUxNjE2bjsgLy8gMl42NAogICAgYnl0ZWMgMjcgLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4NQogICAgLy8gbGV0IHg6IGJpZ3VpbnQgPSBoaSAqIFNISUZUNjQgKyBsbzsKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDg5CiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTEKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTIKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDAKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE3CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE0CgpjYnJ0X3doaWxlX3RvcEAxNzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMQogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDE5CiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxNwoKY2JydF9hZnRlcl93aGlsZUAxOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMgogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHMoKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTAtNTEKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gY2xhaW1SZXdhcmRzKCk6IHZvaWQgewogICAgcHJvdG8gMCAwCiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjUyCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjUzCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjUzCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGZyYW1lX2RpZyAzCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU1CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTUKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NgogICAgLy8gY29uc3QgcGVuZGluZzogdWludDY0ID0gcmV3YXJkcyAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU2CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NwogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTgKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWUgPSByZXdhcmRzOwogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTgKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWUgPSByZXdhcmRzOwogICAgZnJhbWVfZGlnIDEKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHVzZXIgfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDEKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDAKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1OQogICAgLy8gYXNzZXRUcmFuc2Zlcih7IHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwgYXNzZXRBbW91bnQ6IHBlbmRpbmcsIGFzc2V0UmVjZWl2ZXI6IHVzZXIgfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYwCiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnNldEFkbWluRmVlU2hhcmUoYWRtaW5GZWVTaGFyZUJQOiB1aW50NjQpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUtNjYKICAgIC8vIEBhYmltZXRob2QoKQogICAgLy8gc2V0QWRtaW5GZWVTaGFyZShhZG1pbkZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjcKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoYWRtaW5GZWVTaGFyZUJQIDw9IEJQLCAnUmV3YXJkTWFuYWdlcjogdG9vIGhpZ2gnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBhc3NlcnQoYWRtaW5GZWVTaGFyZUJQIDw9IEJQLCAnUmV3YXJkTWFuYWdlcjogdG9vIGhpZ2gnKTsKICAgIDw9CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogdG9vIGhpZ2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjkKICAgIC8vIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlID0gYWRtaW5GZWVTaGFyZUJQOwogICAgZnJhbWVfZGlnIC0xCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmNsYWltQWRtaW5GZWUoKSAtPiB2b2lkOgpjbGFpbUFkbWluRmVlOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjcyLTczCiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIC8vIGNsYWltQWRtaW5GZWUoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NAogICAgLy8gdGhpcy5vbmx5T3duZXIoKTsKICAgIGNhbGxzdWIgb25seU93bmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NgogICAgLy8gaWYgKGFkbWluRmVlQW1vdW50ID4gMCkgewogICAgYnogY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3Ny04MQogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFkbWluRmVlQW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxNCAvLyAib3duZXIiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICBmcmFtZV9kaWcgMAogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3Ny04MQogICAgLy8gYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IGFkbWluRmVlQW1vdW50LAogICAgLy8gICBhc3NldFJlY2VpdmVyOiB0aGlzLm93bmVyLnZhbHVlLmJ5dGVzLAogICAgLy8gfSkuc3VibWl0KCk7CiAgICBpbnRjXzMgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODIKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CgpjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VAMzoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkKHVzZXI6IGJ5dGVzKSAtPiB1aW50NjQ6CnBlbmRpbmdSZXdhcmQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODYtODcKICAgIC8vIEBhYmltZXRob2QoeyByZWFkb25seTogdHJ1ZSB9KQogICAgLy8gcGVuZGluZ1Jld2FyZCh1c2VyOiBBY2NvdW50KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDQgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODgKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyMAogICAgLy8gY29uc3QgUF9TQ0FMRTogYmlndWludCA9IEJpZ1VpbnQoMSA8PCBQKTsKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg4CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk2CiAgICAvLyBwcm90ZWN0ZWQgYWRkUmV3YXJkcyhyZXdhcmRBbW91bnQ6IHVpbnQ2NCk6IHZvaWQgewogICAgcHJvdG8gMSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk4CiAgICAvLyBpZiAodG90YWxTdXBwbHkgPiAwKSB7CiAgICBieiBhZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk5CiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGZyYW1lX2RpZyAtMQogICAgKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE5CiAgICAvLyBleHBvcnQgY29uc3QgQlA6IHVpbnQ2NCA9IDEwXzAwMDsKICAgIGludGMgNCAvLyAxMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk5CiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIC8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDAKICAgIC8vIHJld2FyZEFtb3VudCAtPSBhZG1pbkZlZVJld2FyZHM7CiAgICBmcmFtZV9kaWcgLTEKICAgIGRpZyAxCiAgICAtCiAgICBmcmFtZV9idXJ5IC0xCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjAKICAgIC8vIGNvbnN0IFBfU0NBTEU6IGJpZ3VpbnQgPSBCaWdVaW50KDEgPDwgUCk7CiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDEKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGIqCiAgICBmcmFtZV9kaWcgMAogICAgaXRvYgogICAgYi8KICAgIGIrCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDEKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzEKICAgIC8vIGFkbWluRmVlQW1vdW50ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDExIC8vICJhZG1pbkZlZUFtb3VudCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDIKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKCmFkZFJld2FyZHNfYWZ0ZXJfaWZfZWxzZUAyOgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLmRlcG9zaXRMcCh0bzogYnl0ZXMsIGxwQW1vdW50OiB1aW50NjQpIC0+IHZvaWQ6CmRlcG9zaXRMcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHByb3RlY3RlZCBkZXBvc2l0THAodG86IEFjY291bnQsIGxwQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDIgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBpbnRjXzAgLy8gMAogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDgKICAgIC8vIGxldCBwZW5kaW5nOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDkKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodG8pLnZhbHVlOwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwOQogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBpZiAodXNlckxwQW1vdW50ID4gMCkgewogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlOwogICAgZnJhbWVfZGlnIDIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAwCiAgICBiKgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjIwCiAgICAvLyBjb25zdCBQX1NDQUxFOiBiaWd1aW50ID0gQmlnVWludCgxIDw8IFApOwogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTExCiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyhCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVAgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBmcmFtZV9idXJ5IDEKCmRlcG9zaXRMcF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyB1c2VyTHBBbW91bnQgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE0CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA0IC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0xCiAgICArCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNCAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTUKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyMAogICAgLy8gY29uc3QgUF9TQ0FMRTogYmlndWludCA9IEJpZ1VpbnQoMSA8PCBQKTsKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExNwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIGlmIChwZW5kaW5nID4gMCkgewogICAgZnJhbWVfZGlnIDEKICAgIGJ6IGRlcG9zaXRMcF9hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTkKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGludGNfMCAvLyAwCiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTkKICAgIC8vIGFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGludGNfMyAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIwCiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgaW50Y18wIC8vIDAKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjpPd25hYmxlLnRyYW5zZmVyT3duZXJzaGlwKG5ld093bmVyOiBieXRlcykgLT4gdm9pZDoKdHJhbnNmZXJPd25lcnNoaXA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxNi0xNwogICAgLy8gQGFiaW1ldGhvZCgpCiAgICAvLyBwdWJsaWMgdHJhbnNmZXJPd25lcnNoaXAobmV3T3duZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBmcmFtZV9kaWcgLTEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIK\",\n clear:\n \"I3ByYWdtYSB2ZXJzaW9uIDEwCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\",\n },\n byteCode: {\n approval:\n \"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\",\n clear: \"CoEBQw==\",\n },\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Deposit\",\n args: [\n { type: \"address\", name: \"to\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n {\n name: \"Withdraw\",\n args: [\n { type: \"address\", name: \"from\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n {\n name: \"SwappedToVUsd\",\n args: [\n { type: \"address\", name: \"sender\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n {\n name: \"SwappedFromVUsd\",\n args: [\n { type: \"address\", name: \"recipient\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n ],\n templateVariables: {},\n} as unknown as Arc56Contract;\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined;\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined;\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value;\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString(\"utf-8\") : undefined;\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never;\n\n/**\n * The argument types for the Pool contract\n */\nexport type PoolArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\": {\n owner: string;\n router: string;\n a: bigint | number;\n assetId: bigint | number;\n feeShareBp: bigint | number;\n balanceRatioMinBp: bigint | number;\n };\n \"optInToApplication()void\": Record<string, never>;\n \"optInAsset()void\": Record<string, never>;\n \"noop()void\": Record<string, never>;\n \"deposit()void\": Record<string, never>;\n \"withdraw(uint64)void\": {\n /**\n * The Withdrawn amount\n */\n amountLp: bigint | number;\n };\n \"swapToVUsd(address,uint64,bool)uint64\": {\n user: string;\n /**\n * The amount of tokens to swap.\n */\n amount: bigint | number;\n /**\n * When true it allows to swap without incurring any fees. It is intended for use with service\n accounts.\n\n */\n zeroFee: boolean;\n };\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\": {\n /**\n * The address of the recipient.\n */\n user: string;\n /**\n * The amount of vUSD to swap.\n */\n amount: bigint | number;\n /**\n * The minimum amount of tokens required to be received during the swap, otherwise the\n transaction reverts.\n\n */\n receiveAmountMin: bigint | number;\n /**\n * When true it allows to swap without incurring any fees. It is intended for use with service\n accounts.\n\n */\n zeroFee: boolean;\n };\n \"setFeeShare(uint64)void\": {\n feeShareBp: bigint | number;\n };\n \"adjustTotalLpAmount()void\": Record<string, never>;\n \"setBalanceRatioMinBP(uint64)void\": {\n balanceRatioMinBp: bigint | number;\n };\n \"stopDeposit()void\": Record<string, never>;\n \"startDeposit()void\": Record<string, never>;\n \"stopWithdraw()void\": Record<string, never>;\n \"startWithdraw()void\": Record<string, never>;\n \"setStopAuthority(address)void\": {\n stopAuthority: string;\n };\n \"setRouter(address)void\": {\n router: string;\n };\n \"claimRewards()void\": Record<string, never>;\n \"setAdminFeeShare(uint64)void\": {\n adminFeeShareBp: bigint | number;\n };\n \"claimAdminFee()void\": Record<string, never>;\n \"pendingReward(account)uint64\": {\n user: Uint8Array | string;\n };\n \"decimals()uint64\": Record<string, never>;\n \"transferOwnership(address)void\": {\n newOwner: string;\n };\n };\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\": [\n owner: string,\n router: string,\n a: bigint | number,\n assetId: bigint | number,\n feeShareBp: bigint | number,\n balanceRatioMinBp: bigint | number,\n ];\n \"optInToApplication()void\": [];\n \"optInAsset()void\": [];\n \"noop()void\": [];\n \"deposit()void\": [];\n \"withdraw(uint64)void\": [amountLp: bigint | number];\n \"swapToVUsd(address,uint64,bool)uint64\": [user: string, amount: bigint | number, zeroFee: boolean];\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\": [\n user: string,\n amount: bigint | number,\n receiveAmountMin: bigint | number,\n zeroFee: boolean,\n ];\n \"setFeeShare(uint64)void\": [feeShareBp: bigint | number];\n \"adjustTotalLpAmount()void\": [];\n \"setBalanceRatioMinBP(uint64)void\": [balanceRatioMinBp: bigint | number];\n \"stopDeposit()void\": [];\n \"startDeposit()void\": [];\n \"stopWithdraw()void\": [];\n \"startWithdraw()void\": [];\n \"setStopAuthority(address)void\": [stopAuthority: string];\n \"setRouter(address)void\": [router: string];\n \"claimRewards()void\": [];\n \"setAdminFeeShare(uint64)void\": [adminFeeShareBp: bigint | number];\n \"claimAdminFee()void\": [];\n \"pendingReward(account)uint64\": [user: Uint8Array | string];\n \"decimals()uint64\": [];\n \"transferOwnership(address)void\": [newOwner: string];\n };\n};\n\n/**\n * The return type for each method\n */\nexport type PoolReturns = {\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\": void;\n \"optInToApplication()void\": void;\n \"optInAsset()void\": void;\n \"noop()void\": void;\n \"deposit()void\": void;\n \"withdraw(uint64)void\": void;\n \"swapToVUsd(address,uint64,bool)uint64\": bigint;\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\": bigint;\n \"setFeeShare(uint64)void\": void;\n \"adjustTotalLpAmount()void\": void;\n \"setBalanceRatioMinBP(uint64)void\": void;\n \"stopDeposit()void\": void;\n \"startDeposit()void\": void;\n \"stopWithdraw()void\": void;\n \"startWithdraw()void\": void;\n \"setStopAuthority(address)void\": void;\n \"setRouter(address)void\": void;\n \"claimRewards()void\": void;\n \"setAdminFeeShare(uint64)void\": void;\n \"claimAdminFee()void\": void;\n \"pendingReward(account)uint64\": bigint;\n \"decimals()uint64\": bigint;\n \"transferOwnership(address)void\": void;\n};\n\n/**\n * Defines the types of available calls and state of the Pool smart contract.\n */\nexport type PoolTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods: Record<\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\" | \"createApplication\",\n {\n argsObj: PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"];\n returns: PoolReturns[\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"];\n }\n > &\n Record<\n \"optInToApplication()void\" | \"optInToApplication\",\n {\n argsObj: PoolArgs[\"obj\"][\"optInToApplication()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"optInToApplication()void\"];\n returns: PoolReturns[\"optInToApplication()void\"];\n }\n > &\n Record<\n \"optInAsset()void\" | \"optInAsset\",\n {\n argsObj: PoolArgs[\"obj\"][\"optInAsset()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"optInAsset()void\"];\n returns: PoolReturns[\"optInAsset()void\"];\n }\n > &\n Record<\n \"noop()void\" | \"noop\",\n {\n argsObj: PoolArgs[\"obj\"][\"noop()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"noop()void\"];\n returns: PoolReturns[\"noop()void\"];\n }\n > &\n Record<\n \"deposit()void\" | \"deposit\",\n {\n argsObj: PoolArgs[\"obj\"][\"deposit()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"deposit()void\"];\n returns: PoolReturns[\"deposit()void\"];\n }\n > &\n Record<\n \"withdraw(uint64)void\" | \"withdraw\",\n {\n argsObj: PoolArgs[\"obj\"][\"withdraw(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"withdraw(uint64)void\"];\n returns: PoolReturns[\"withdraw(uint64)void\"];\n }\n > &\n Record<\n \"swapToVUsd(address,uint64,bool)uint64\" | \"swapToVUsd\",\n {\n argsObj: PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"];\n /**\n * returns the difference between the old and the new value of vUsdBalance\n */\n returns: PoolReturns[\"swapToVUsd(address,uint64,bool)uint64\"];\n }\n > &\n Record<\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\" | \"swapFromVUsd\",\n {\n argsObj: PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"];\n /**\n * returns the difference between the old and the new value of vUsdBalance\n */\n returns: PoolReturns[\"swapFromVUsd(address,uint64,uint64,bool)uint64\"];\n }\n > &\n Record<\n \"setFeeShare(uint64)void\" | \"setFeeShare\",\n {\n argsObj: PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"];\n returns: PoolReturns[\"setFeeShare(uint64)void\"];\n }\n > &\n Record<\n \"adjustTotalLpAmount()void\" | \"adjustTotalLpAmount\",\n {\n argsObj: PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"];\n returns: PoolReturns[\"adjustTotalLpAmount()void\"];\n }\n > &\n Record<\n \"setBalanceRatioMinBP(uint64)void\" | \"setBalanceRatioMinBP\",\n {\n argsObj: PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"];\n returns: PoolReturns[\"setBalanceRatioMinBP(uint64)void\"];\n }\n > &\n Record<\n \"stopDeposit()void\" | \"stopDeposit\",\n {\n argsObj: PoolArgs[\"obj\"][\"stopDeposit()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"stopDeposit()void\"];\n returns: PoolReturns[\"stopDeposit()void\"];\n }\n > &\n Record<\n \"startDeposit()void\" | \"startDeposit\",\n {\n argsObj: PoolArgs[\"obj\"][\"startDeposit()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"startDeposit()void\"];\n returns: PoolReturns[\"startDeposit()void\"];\n }\n > &\n Record<\n \"stopWithdraw()void\" | \"stopWithdraw\",\n {\n argsObj: PoolArgs[\"obj\"][\"stopWithdraw()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"stopWithdraw()void\"];\n returns: PoolReturns[\"stopWithdraw()void\"];\n }\n > &\n Record<\n \"startWithdraw()void\" | \"startWithdraw\",\n {\n argsObj: PoolArgs[\"obj\"][\"startWithdraw()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"startWithdraw()void\"];\n returns: PoolReturns[\"startWithdraw()void\"];\n }\n > &\n Record<\n \"setStopAuthority(address)void\" | \"setStopAuthority\",\n {\n argsObj: PoolArgs[\"obj\"][\"setStopAuthority(address)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"];\n returns: PoolReturns[\"setStopAuthority(address)void\"];\n }\n > &\n Record<\n \"setRouter(address)void\" | \"setRouter\",\n {\n argsObj: PoolArgs[\"obj\"][\"setRouter(address)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setRouter(address)void\"];\n returns: PoolReturns[\"setRouter(address)void\"];\n }\n > &\n Record<\n \"claimRewards()void\" | \"claimRewards\",\n {\n argsObj: PoolArgs[\"obj\"][\"claimRewards()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"claimRewards()void\"];\n returns: PoolReturns[\"claimRewards()void\"];\n }\n > &\n Record<\n \"setAdminFeeShare(uint64)void\" | \"setAdminFeeShare\",\n {\n argsObj: PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"];\n returns: PoolReturns[\"setAdminFeeShare(uint64)void\"];\n }\n > &\n Record<\n \"claimAdminFee()void\" | \"claimAdminFee\",\n {\n argsObj: PoolArgs[\"obj\"][\"claimAdminFee()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"claimAdminFee()void\"];\n returns: PoolReturns[\"claimAdminFee()void\"];\n }\n > &\n Record<\n \"pendingReward(account)uint64\" | \"pendingReward\",\n {\n argsObj: PoolArgs[\"obj\"][\"pendingReward(account)uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"];\n returns: PoolReturns[\"pendingReward(account)uint64\"];\n }\n > &\n Record<\n \"decimals()uint64\" | \"decimals\",\n {\n argsObj: PoolArgs[\"obj\"][\"decimals()uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"decimals()uint64\"];\n returns: PoolReturns[\"decimals()uint64\"];\n }\n > &\n Record<\n \"transferOwnership(address)void\" | \"transferOwnership\",\n {\n argsObj: PoolArgs[\"obj\"][\"transferOwnership(address)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"transferOwnership(address)void\"];\n returns: PoolReturns[\"transferOwnership(address)void\"];\n }\n >;\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n feeShareBp: bigint;\n router: string;\n tokenBalance: bigint;\n vUsdBalance: bigint;\n balanceRatioMinBp: bigint;\n reserves: bigint;\n a: bigint;\n d: bigint;\n tokenAmountReduce: bigint;\n tokenAmountIncrease: bigint;\n stopAuthority: string;\n canDeposit: bigint;\n canWithdraw: bigint;\n asset: bigint;\n adminFeeShareBp: bigint;\n totalSupply: bigint;\n accRewardPerShareP: BinaryState;\n adminFeeAmount: bigint;\n owner: string;\n };\n maps: {};\n };\n local: {\n keys: {\n balance: bigint;\n userRewardDebt: bigint;\n };\n maps: {};\n };\n };\n};\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type PoolSignatures = keyof PoolTypes[\"methods\"];\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type PoolNonVoidMethodSignatures = keyof PoolTypes[\"methods\"] extends infer T\n ? T extends keyof PoolTypes[\"methods\"]\n ? MethodReturn<T> extends void\n ? never\n : T\n : never\n : never;\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, \"method\" | \"args\" | \"onComplete\"> & {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>;\n }\n>;\n/**\n * Maps a method signature from the Pool smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends PoolSignatures> = PoolTypes[\"methods\"][TSignature][\"argsObj\" | \"argsTuple\"];\n/**\n * Maps a method signature from the Pool smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends PoolSignatures> = PoolTypes[\"methods\"][TSignature][\"returns\"];\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = PoolTypes[\"state\"][\"global\"][\"keys\"];\n\n/**\n * Defines the shape of the keyed local state of the application.\n */\nexport type LocalKeysState = PoolTypes[\"state\"][\"local\"][\"keys\"];\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type PoolCreateCallParams =\n | Expand<\n CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > & { method: \"createApplication\" } & { onComplete?: OnApplicationComplete.NoOpOC } & CreateSchema\n >\n | Expand<\n CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > & { method: \"createApplication(address,address,uint64,uint64,uint64,uint64)void\" } & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } & CreateSchema\n >;\n/**\n * Defines arguments required for the deploy method.\n */\nexport type PoolDeployParams = Expand<\n Omit<AppFactoryDeployParams, \"createParams\" | \"updateParams\" | \"deleteParams\"> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: PoolCreateCallParams;\n }\n>;\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Pool smart contract\n */\nexport abstract class PoolParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends PoolCreateCallParams & { method: string }>(params: TParams) {\n switch (params.method) {\n case \"createApplication\":\n case \"createApplication(address,address,uint64,uint64,uint64,uint64)void\":\n return PoolParamsFactory.create.createApplication(params);\n }\n throw new Error(`Unknown ' + verb + ' method`);\n },\n\n /**\n * Constructs create ABI call params for the Pool smart contract using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n createApplication(\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ): AppClientMethodCallParams & AppClientCompilationParams & { onComplete?: OnApplicationComplete.NoOpOC } {\n return {\n ...params,\n method: \"createApplication(address,address,uint64,uint64,uint64,uint64)void\" as const,\n args: Array.isArray(params.args)\n ? params.args\n : [\n params.args.owner,\n params.args.router,\n params.args.a,\n params.args.assetId,\n params.args.feeShareBp,\n params.args.balanceRatioMinBp,\n ],\n };\n },\n };\n }\n\n /**\n * Gets available optIn ABI call param factories\n */\n static get optIn() {\n return {\n /**\n * Constructs opt-in ABI call params for the Pool smart contract using the optInToApplication()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n optInToApplication(\n params: CallParams<PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]>\n ): AppClientMethodCallParams {\n return {\n ...params,\n method: \"optInToApplication()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n },\n };\n }\n\n /**\n * Constructs a no op call for the optInAsset()void ABI method\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optInAsset(\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"optInAsset()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the noop()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static noop(\n params: CallParams<PoolArgs[\"obj\"][\"noop()void\"] | PoolArgs[\"tuple\"][\"noop()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"noop()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the deposit()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static deposit(\n params: CallParams<PoolArgs[\"obj\"][\"deposit()void\"] | PoolArgs[\"tuple\"][\"deposit()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"deposit()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the withdraw(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static withdraw(\n params: CallParams<PoolArgs[\"obj\"][\"withdraw(uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64)void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"withdraw(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.amountLp],\n };\n }\n /**\n * Constructs a no op call for the swapToVUsd(address,uint64,bool)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static swapToVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"swapToVUsd(address,uint64,bool)uint64\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.user, params.args.amount, params.args.zeroFee],\n };\n }\n /**\n * Constructs a no op call for the swapFromVUsd(address,uint64,uint64,bool)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static swapFromVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"swapFromVUsd(address,uint64,uint64,bool)uint64\" as const,\n args: Array.isArray(params.args)\n ? params.args\n : [params.args.user, params.args.amount, params.args.receiveAmountMin, params.args.zeroFee],\n };\n }\n /**\n * Constructs a no op call for the setFeeShare(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setFeeShare(\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setFeeShare(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.feeShareBp],\n };\n }\n /**\n * Constructs a no op call for the adjustTotalLpAmount()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static adjustTotalLpAmount(\n params: CallParams<PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"adjustTotalLpAmount()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the setBalanceRatioMinBP(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setBalanceRatioMinBp(\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setBalanceRatioMinBP(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.balanceRatioMinBp],\n };\n }\n /**\n * Constructs a no op call for the stopDeposit()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static stopDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"stopDeposit()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the startDeposit()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static startDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"startDeposit()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the stopWithdraw()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static stopWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"stopWithdraw()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the startWithdraw()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static startWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"startWithdraw()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the setStopAuthority(address)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setStopAuthority(\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setStopAuthority(address)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.stopAuthority],\n };\n }\n /**\n * Constructs a no op call for the setRouter(address)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setRouter(\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setRouter(address)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.router],\n };\n }\n /**\n * Constructs a no op call for the claimRewards()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static claimRewards(\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"claimRewards()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the setAdminFeeShare(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setAdminFeeShare(\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setAdminFeeShare(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.adminFeeShareBp],\n };\n }\n /**\n * Constructs a no op call for the claimAdminFee()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static claimAdminFee(\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"claimAdminFee()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the pendingReward(account)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static pendingReward(\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"pendingReward(account)uint64\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.user],\n };\n }\n /**\n * Constructs a no op call for the decimals()uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static decimals(\n params: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"decimals()uint64\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the transferOwnership(address)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static transferOwnership(\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"transferOwnership(address)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.newOwner],\n };\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Pool smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class PoolFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory;\n\n /**\n * Creates a new instance of `PoolFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, \"appSpec\">) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n });\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName;\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC;\n }\n\n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand;\n }\n\n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new PoolClient(this.appFactory.getAppClientById(params));\n }\n\n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams) {\n return new PoolClient(await this.appFactory.getAppClientByCreatorAndName(params));\n }\n\n /**\n * Idempotently deploys the Pool smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: PoolDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method\n ? PoolParamsFactory.create._resolveByMethod(params.createParams)\n : params.createParams\n ? (params.createParams as PoolCreateCallParams & { args: Uint8Array[] })\n : undefined,\n });\n return { result: result.result, appClient: new PoolClient(result.appClient) };\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Pool smart contract using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n createApplication: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams &\n CreateSchema & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appFactory.params.create(PoolParamsFactory.create.createApplication(params));\n },\n },\n };\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Pool smart contract using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n createApplication: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams &\n CreateSchema & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appFactory.createTransaction.create(PoolParamsFactory.create.createApplication(params));\n },\n },\n };\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Pool smart contract using an ABI method call using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n createApplication: async (\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams &\n CreateSchema &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appFactory.send.create(PoolParamsFactory.create.createApplication(params));\n return {\n result: {\n ...result.result,\n return: result.result.return as unknown as\n | undefined\n | PoolReturns[\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"],\n },\n appClient: new PoolClient(result.appClient),\n };\n },\n },\n };\n}\n/**\n * A client to make calls to the Pool smart contract\n */\nexport class PoolClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient;\n\n /**\n * Creates a new instance of `PoolClient`\n *\n * @param appClient An `AppClient` instance which has been created with the Pool app spec\n */\n constructor(appClient: _AppClient);\n /**\n * Creates a new instance of `PoolClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, \"appSpec\">);\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, \"appSpec\">) {\n this.appClient =\n appClientOrParams instanceof _AppClient\n ? appClientOrParams\n : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n });\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends PoolNonVoidMethodSignatures>(\n method: TSignature,\n returnValue: ABIReturn | undefined\n ) {\n return returnValue !== undefined\n ? getArc56ReturnValue<MethodReturn<TSignature>>(\n returnValue,\n this.appClient.getABIMethod(method),\n APP_SPEC.structs\n )\n : undefined;\n }\n\n /**\n * Returns a new `PoolClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(\n params: Omit<ResolveAppClientByCreatorAndName, \"appSpec\">\n ): Promise<PoolClient> {\n return new PoolClient(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));\n }\n\n /**\n * Returns an `PoolClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(params: Omit<ResolveAppClientByNetwork, \"appSpec\">): Promise<PoolClient> {\n return new PoolClient(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId;\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress;\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName;\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec;\n }\n\n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand;\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available optIn methods\n */\n optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `optInToApplication()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn params\n */\n optInToApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n > = { args: [] }\n ) => {\n return this.appClient.params.optIn(PoolParamsFactory.optIn.optInToApplication(params));\n },\n },\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Pool smart contract using the `optInAsset()void` ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optInAsset: (\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.optInAsset(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `noop()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n noop: (\n params: CallParams<PoolArgs[\"obj\"][\"noop()void\"] | PoolArgs[\"tuple\"][\"noop()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.noop(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `deposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n deposit: (\n params: CallParams<PoolArgs[\"obj\"][\"deposit()void\"] | PoolArgs[\"tuple\"][\"deposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.deposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `withdraw(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n withdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"withdraw(uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.withdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapToVUsd(address,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params: returns the difference between the old and the new value of vUsdBalance\n */\n swapToVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.swapToVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapFromVUsd(address,uint64,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params: returns the difference between the old and the new value of vUsdBalance\n */\n swapFromVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.swapFromVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setFeeShare: (\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `adjustTotalLpAmount()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n adjustTotalLpAmount: (\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.adjustTotalLpAmount(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setBalanceRatioMinBP(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setBalanceRatioMinBp: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setBalanceRatioMinBp(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n stopDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.stopDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n startDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.startDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n stopWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.stopWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n startWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.startWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setStopAuthority(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setStopAuthority: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setStopAuthority(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setRouter(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setRouter: (\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setRouter(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimRewards()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n claimRewards: (\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.claimRewards(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setAdminFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setAdminFeeShare: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setAdminFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimAdminFee()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n claimAdminFee: (\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.claimAdminFee(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `pendingReward(account)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n pendingReward: (\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.pendingReward(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `decimals()uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n decimals: (\n params: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.decimals(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `transferOwnership(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n transferOwnership: (\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.transferOwnership(params));\n },\n };\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available optIn methods\n */\n optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `optInToApplication()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn transaction\n */\n optInToApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n > = { args: [] }\n ) => {\n return this.appClient.createTransaction.optIn(PoolParamsFactory.optIn.optInToApplication(params));\n },\n },\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Pool smart contract using the `optInAsset()void` ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optInAsset: (\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.optInAsset(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `noop()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n noop: (\n params: CallParams<PoolArgs[\"obj\"][\"noop()void\"] | PoolArgs[\"tuple\"][\"noop()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.noop(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `deposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n deposit: (\n params: CallParams<PoolArgs[\"obj\"][\"deposit()void\"] | PoolArgs[\"tuple\"][\"deposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.deposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `withdraw(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n withdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"withdraw(uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.withdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapToVUsd(address,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: returns the difference between the old and the new value of vUsdBalance\n */\n swapToVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.swapToVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapFromVUsd(address,uint64,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: returns the difference between the old and the new value of vUsdBalance\n */\n swapFromVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.swapFromVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setFeeShare: (\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `adjustTotalLpAmount()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n adjustTotalLpAmount: (\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.adjustTotalLpAmount(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setBalanceRatioMinBP(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setBalanceRatioMinBp: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setBalanceRatioMinBp(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n stopDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.stopDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n startDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.startDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n stopWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.stopWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n startWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.startWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setStopAuthority(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setStopAuthority: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setStopAuthority(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setRouter(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setRouter: (\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setRouter(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimRewards()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n claimRewards: (\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.claimRewards(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setAdminFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setAdminFeeShare: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setAdminFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimAdminFee()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n claimAdminFee: (\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.claimAdminFee(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `pendingReward(account)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n pendingReward: (\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.pendingReward(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `decimals()uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n decimals: (\n params: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.decimals(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `transferOwnership(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n transferOwnership: (\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.transferOwnership(params));\n },\n };\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available optIn methods\n */\n optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `optInToApplication()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn result\n */\n optInToApplication: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n > &\n SendParams = { args: [] }\n ) => {\n const result = await this.appClient.send.optIn(PoolParamsFactory.optIn.optInToApplication(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"optInToApplication()void\"] };\n },\n },\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Pool smart contract using the `optInAsset()void` ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optInAsset: async (\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.optInAsset(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"optInAsset()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `noop()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n noop: async (\n params: CallParams<PoolArgs[\"obj\"][\"noop()void\"] | PoolArgs[\"tuple\"][\"noop()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.noop(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"noop()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `deposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n deposit: async (\n params: CallParams<PoolArgs[\"obj\"][\"deposit()void\"] | PoolArgs[\"tuple\"][\"deposit()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.deposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"deposit()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `withdraw(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n withdraw: async (\n params: CallParams<PoolArgs[\"obj\"][\"withdraw(uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64)void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.withdraw(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"withdraw(uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapToVUsd(address,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result: returns the difference between the old and the new value of vUsdBalance\n */\n swapToVUsd: async (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.swapToVUsd(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"swapToVUsd(address,uint64,bool)uint64\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapFromVUsd(address,uint64,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result: returns the difference between the old and the new value of vUsdBalance\n */\n swapFromVUsd: async (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.swapFromVUsd(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"swapFromVUsd(address,uint64,uint64,bool)uint64\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setFeeShare: async (\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setFeeShare(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"setFeeShare(uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `adjustTotalLpAmount()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n adjustTotalLpAmount: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.adjustTotalLpAmount(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"adjustTotalLpAmount()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setBalanceRatioMinBP(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setBalanceRatioMinBp: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setBalanceRatioMinBp(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"setBalanceRatioMinBP(uint64)void\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n stopDeposit: async (\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.stopDeposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"stopDeposit()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n startDeposit: async (\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.startDeposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"startDeposit()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n stopWithdraw: async (\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.stopWithdraw(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"stopWithdraw()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n startWithdraw: async (\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.startWithdraw(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"startWithdraw()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setStopAuthority(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setStopAuthority: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setStopAuthority(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"setStopAuthority(address)void\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setRouter(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setRouter: async (\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setRouter(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"setRouter(address)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimRewards()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n claimRewards: async (\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.claimRewards(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"claimRewards()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setAdminFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setAdminFeeShare: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setAdminFeeShare(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"setAdminFeeShare(uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimAdminFee()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n claimAdminFee: async (\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.claimAdminFee(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"claimAdminFee()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `pendingReward(account)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n pendingReward: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.pendingReward(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"pendingReward(account)uint64\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `decimals()uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n decimals: async (\n params: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.decimals(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"decimals()uint64\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `transferOwnership(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n transferOwnership: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.transferOwnership(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"transferOwnership(address)void\"],\n };\n },\n };\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new PoolClient(this.appClient.clone(params));\n }\n\n /**\n * Makes a readonly (simulated) call to the Pool smart contract using the `pendingReward(account)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async pendingReward(\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n >\n ) {\n const result = await this.appClient.send.call(PoolParamsFactory.pendingReward(params));\n return result.return as unknown as PoolReturns[\"pendingReward(account)uint64\"];\n }\n\n /**\n * Makes a readonly (simulated) call to the Pool smart contract using the `decimals()uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async decimals(\n params: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]> = { args: [] }\n ) {\n const result = await this.appClient.send.call(PoolParamsFactory.decimals(params));\n return result.return as unknown as PoolReturns[\"decimals()uint64\"];\n }\n\n /**\n * Methods to access state for the current Pool app\n */\n state = {\n /**\n * Methods to access global state for the current Pool app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll();\n return {\n feeShareBp: result.feeShareBP,\n router: result.router,\n tokenBalance: result.tokenBalance,\n vUsdBalance: result.vUsdBalance,\n balanceRatioMinBp: result.balanceRatioMinBP,\n reserves: result.reserves,\n a: result.a,\n d: result.d,\n tokenAmountReduce: result.tokenAmountReduce,\n tokenAmountIncrease: result.tokenAmountIncrease,\n stopAuthority: result.stopAuthority,\n canDeposit: result.canDeposit,\n canWithdraw: result.canWithdraw,\n asset: result.asset,\n adminFeeShareBp: result.adminFeeShareBP,\n totalSupply: result.totalSupply,\n accRewardPerShareP: new BinaryStateValue(result.accRewardPerShareP),\n adminFeeAmount: result.adminFeeAmount,\n owner: result.owner,\n };\n },\n /**\n * Get the current value of the feeShareBP key in global state\n */\n feeShareBp: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"feeShareBP\")) as bigint | undefined;\n },\n /**\n * Get the current value of the router key in global state\n */\n router: async (): Promise<string | undefined> => {\n return (await this.appClient.state.global.getValue(\"router\")) as string | undefined;\n },\n /**\n * Get the current value of the tokenBalance key in global state\n */\n tokenBalance: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"tokenBalance\")) as bigint | undefined;\n },\n /**\n * Get the current value of the vUsdBalance key in global state\n */\n vUsdBalance: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"vUsdBalance\")) as bigint | undefined;\n },\n /**\n * Get the current value of the balanceRatioMinBP key in global state\n */\n balanceRatioMinBp: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"balanceRatioMinBP\")) as bigint | undefined;\n },\n /**\n * Get the current value of the reserves key in global state\n */\n reserves: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"reserves\")) as bigint | undefined;\n },\n /**\n * Get the current value of the a key in global state\n */\n a: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"a\")) as bigint | undefined;\n },\n /**\n * Get the current value of the d key in global state\n */\n d: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"d\")) as bigint | undefined;\n },\n /**\n * Get the current value of the tokenAmountReduce key in global state\n */\n tokenAmountReduce: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"tokenAmountReduce\")) as bigint | undefined;\n },\n /**\n * Get the current value of the tokenAmountIncrease key in global state\n */\n tokenAmountIncrease: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"tokenAmountIncrease\")) as bigint | undefined;\n },\n /**\n * Get the current value of the stopAuthority key in global state\n */\n stopAuthority: async (): Promise<string | undefined> => {\n return (await this.appClient.state.global.getValue(\"stopAuthority\")) as string | undefined;\n },\n /**\n * Get the current value of the canDeposit key in global state\n */\n canDeposit: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"canDeposit\")) as bigint | undefined;\n },\n /**\n * Get the current value of the canWithdraw key in global state\n */\n canWithdraw: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"canWithdraw\")) as bigint | undefined;\n },\n /**\n * Get the current value of the asset key in global state\n */\n asset: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"asset\")) as bigint | undefined;\n },\n /**\n * Get the current value of the adminFeeShareBP key in global state\n */\n adminFeeShareBp: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"adminFeeShareBP\")) as bigint | undefined;\n },\n /**\n * Get the current value of the totalSupply key in global state\n */\n totalSupply: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"totalSupply\")) as bigint | undefined;\n },\n /**\n * Get the current value of the accRewardPerShareP key in global state\n */\n accRewardPerShareP: async (): Promise<BinaryState> => {\n return new BinaryStateValue(\n (await this.appClient.state.global.getValue(\"accRewardPerShareP\")) as Uint8Array | undefined\n );\n },\n /**\n * Get the current value of the adminFeeAmount key in global state\n */\n adminFeeAmount: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"adminFeeAmount\")) as bigint | undefined;\n },\n /**\n * Get the current value of the owner key in global state\n */\n owner: async (): Promise<string | undefined> => {\n return (await this.appClient.state.global.getValue(\"owner\")) as string | undefined;\n },\n },\n /**\n * Methods to access local state for the current Pool app\n */\n local: (address: string | Address) => {\n const encodedAddress = typeof address === \"string\" ? address : encodeAddress(address.publicKey);\n return {\n /**\n * Get all current keyed values from local state\n */\n getAll: async (): Promise<Partial<Expand<LocalKeysState>>> => {\n const result = await this.appClient.state.local(encodedAddress).getAll();\n return {\n balance: result.balance,\n userRewardDebt: result.userRewardDebt,\n };\n },\n /**\n * Get the current value of the balance key in local state\n */\n balance: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.local(encodedAddress).getValue(\"balance\")) as bigint | undefined;\n },\n /**\n * Get the current value of the userRewardDebt key in local state\n */\n userRewardDebt: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.local(encodedAddress).getValue(\"userRewardDebt\")) as bigint | undefined;\n },\n };\n },\n };\n\n public newGroup(): PoolComposer {\n const client = this;\n const composer = this.algorand.newGroup();\n let promiseChain: Promise<unknown> = Promise.resolve();\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = [];\n return {\n /**\n * Add a optInAsset()void method call against the Pool contract\n */\n optInAsset(\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.optInAsset(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a noop()void method call against the Pool contract\n */\n noop(\n params: CallParams<PoolArgs[\"obj\"][\"noop()void\"] | PoolArgs[\"tuple\"][\"noop()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () => composer.addAppCallMethodCall(await client.params.noop(params)));\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a deposit()void method call against the Pool contract\n */\n deposit(\n params: CallParams<PoolArgs[\"obj\"][\"deposit()void\"] | PoolArgs[\"tuple\"][\"deposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.deposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a withdraw(uint64)void method call against the Pool contract\n */\n withdraw(\n params: CallParams<PoolArgs[\"obj\"][\"withdraw(uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.withdraw(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a swapToVUsd(address,uint64,bool)uint64 method call against the Pool contract\n */\n swapToVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.swapToVUsd(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"swapToVUsd(address,uint64,bool)uint64\", v));\n return this;\n },\n /**\n * Add a swapFromVUsd(address,uint64,uint64,bool)uint64 method call against the Pool contract\n */\n swapFromVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.swapFromVUsd(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"swapFromVUsd(address,uint64,uint64,bool)uint64\", v));\n return this;\n },\n /**\n * Add a setFeeShare(uint64)void method call against the Pool contract\n */\n setFeeShare(\n params: CallParams<\n PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setFeeShare(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a adjustTotalLpAmount()void method call against the Pool contract\n */\n adjustTotalLpAmount(\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.adjustTotalLpAmount(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setBalanceRatioMinBP(uint64)void method call against the Pool contract\n */\n setBalanceRatioMinBp(\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setBalanceRatioMinBp(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a stopDeposit()void method call against the Pool contract\n */\n stopDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.stopDeposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a startDeposit()void method call against the Pool contract\n */\n startDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.startDeposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a stopWithdraw()void method call against the Pool contract\n */\n stopWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.stopWithdraw(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a startWithdraw()void method call against the Pool contract\n */\n startWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.startWithdraw(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setStopAuthority(address)void method call against the Pool contract\n */\n setStopAuthority(\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setStopAuthority(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setRouter(address)void method call against the Pool contract\n */\n setRouter(\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setRouter(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a claimRewards()void method call against the Pool contract\n */\n claimRewards(\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.claimRewards(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setAdminFeeShare(uint64)void method call against the Pool contract\n */\n setAdminFeeShare(\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setAdminFeeShare(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a claimAdminFee()void method call against the Pool contract\n */\n claimAdminFee(\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.claimAdminFee(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a pendingReward(account)uint64 method call against the Pool contract\n */\n pendingReward(\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.pendingReward(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"pendingReward(account)uint64\", v));\n return this;\n },\n /**\n * Add a decimals()uint64 method call against the Pool contract\n */\n decimals(\n params: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.decimals(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"decimals()uint64\", v));\n return this;\n },\n /**\n * Add a transferOwnership(address)void method call against the Pool contract\n */\n transferOwnership(\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.transferOwnership(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n get optIn() {\n return {\n optInToApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n >\n ) => {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.optIn.optInToApplication(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n };\n },\n /**\n * Add a clear state call to the Pool contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));\n return this;\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));\n return this;\n },\n async composer() {\n await promiseChain;\n return composer;\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain;\n const result = await (!options ? composer.simulate() : composer.simulate(options));\n return {\n ...result,\n returns: result.returns?.map((val, i) =>\n resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue\n ),\n };\n },\n async send(params?: SendParams) {\n await promiseChain;\n const result = await composer.send(params);\n return {\n ...result,\n returns: result.returns?.map((val, i) =>\n resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue\n ),\n };\n },\n } as unknown as PoolComposer;\n }\n}\nexport type PoolComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the optInAsset()void ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optInAsset(\n params?: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"optInAsset()void\"] | undefined]>;\n\n /**\n * Calls the noop()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n noop(\n params?: CallParams<PoolArgs[\"obj\"][\"noop()void\"] | PoolArgs[\"tuple\"][\"noop()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"noop()void\"] | undefined]>;\n\n /**\n * Calls the deposit()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deposit(\n params?: CallParams<PoolArgs[\"obj\"][\"deposit()void\"] | PoolArgs[\"tuple\"][\"deposit()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"deposit()void\"] | undefined]>;\n\n /**\n * Calls the withdraw(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n withdraw(\n params?: CallParams<PoolArgs[\"obj\"][\"withdraw(uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"withdraw(uint64)void\"] | undefined]>;\n\n /**\n * Calls the swapToVUsd(address,uint64,bool)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n swapToVUsd(\n params?: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"swapToVUsd(address,uint64,bool)uint64\"] | undefined]>;\n\n /**\n * Calls the swapFromVUsd(address,uint64,uint64,bool)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n swapFromVUsd(\n params?: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"swapFromVUsd(address,uint64,uint64,bool)uint64\"] | undefined]>;\n\n /**\n * Calls the setFeeShare(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setFeeShare(\n params?: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"setFeeShare(uint64)void\"] | undefined]>;\n\n /**\n * Calls the adjustTotalLpAmount()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n adjustTotalLpAmount(\n params?: CallParams<PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"adjustTotalLpAmount()void\"] | undefined]>;\n\n /**\n * Calls the setBalanceRatioMinBP(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setBalanceRatioMinBp(\n params?: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"setBalanceRatioMinBP(uint64)void\"] | undefined]>;\n\n /**\n * Calls the stopDeposit()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n stopDeposit(\n params?: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"stopDeposit()void\"] | undefined]>;\n\n /**\n * Calls the startDeposit()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n startDeposit(\n params?: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"startDeposit()void\"] | undefined]>;\n\n /**\n * Calls the stopWithdraw()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n stopWithdraw(\n params?: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"stopWithdraw()void\"] | undefined]>;\n\n /**\n * Calls the startWithdraw()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n startWithdraw(\n params?: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"startWithdraw()void\"] | undefined]>;\n\n /**\n * Calls the setStopAuthority(address)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setStopAuthority(\n params?: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"setStopAuthority(address)void\"] | undefined]>;\n\n /**\n * Calls the setRouter(address)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setRouter(\n params?: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"setRouter(address)void\"] | undefined]>;\n\n /**\n * Calls the claimRewards()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claimRewards(\n params?: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"claimRewards()void\"] | undefined]>;\n\n /**\n * Calls the setAdminFeeShare(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setAdminFeeShare(\n params?: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"setAdminFeeShare(uint64)void\"] | undefined]>;\n\n /**\n * Calls the claimAdminFee()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claimAdminFee(\n params?: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"claimAdminFee()void\"] | undefined]>;\n\n /**\n * Calls the pendingReward(account)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n pendingReward(\n params?: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(account)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(account)uint64\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"pendingReward(account)uint64\"] | undefined]>;\n\n /**\n * Calls the decimals()uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n decimals(\n params?: CallParams<PoolArgs[\"obj\"][\"decimals()uint64\"] | PoolArgs[\"tuple\"][\"decimals()uint64\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"decimals()uint64\"] | undefined]>;\n\n /**\n * Calls the transferOwnership(address)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n transferOwnership(\n params?: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"transferOwnership(address)void\"] | undefined]>;\n\n /**\n * Gets available optIn methods\n */\n readonly optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the optInToApplication()void ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optInToApplication(\n params?: CallParams<PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"optInToApplication()void\"] | undefined]>;\n };\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): PoolComposer<[...TReturns, undefined]>;\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): PoolComposer<TReturns>;\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>;\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<PoolComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>;\n simulate(\n options: SkipSignaturesSimulateOptions\n ): Promise<PoolComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>;\n simulate(\n options: RawSimulateOptions\n ): Promise<PoolComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>;\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<PoolComposerResults<TReturns>>;\n};\nexport type PoolComposerResults<TReturns extends [...any[]]> = Expand<\n SendAtomicTransactionComposerResults & {\n returns: TReturns;\n }\n>;\n"]}
1
+ {"version":3,"file":"PoolClient.js","sourceRoot":"","sources":["../../../../../src/services/models/alg/PoolClient.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable */\n/**\n * This file was automatically generated by @algorandfoundation/algokit-client-generator.\n * DO NOT MODIFY IT BY HAND.\n * requires: @algorandfoundation/algokit-utils: ^7\n */\nimport { type AlgorandClient } from \"@algorandfoundation/algokit-utils/types/algorand-client\";\nimport { ABIReturn, AppReturn, SendAppTransactionResult } from \"@algorandfoundation/algokit-utils/types/app\";\nimport {\n Arc56Contract,\n getArc56ReturnValue,\n getABIStructFromABITuple,\n} from \"@algorandfoundation/algokit-utils/types/app-arc56\";\nimport {\n AppClient as _AppClient,\n AppClientMethodCallParams,\n AppClientParams,\n AppClientBareCallParams,\n CallOnComplete,\n AppClientCompilationParams,\n ResolveAppClientByCreatorAndName,\n ResolveAppClientByNetwork,\n CloneAppClientParams,\n} from \"@algorandfoundation/algokit-utils/types/app-client\";\nimport {\n AppFactory as _AppFactory,\n AppFactoryAppClientParams,\n AppFactoryResolveAppClientByCreatorAndNameParams,\n AppFactoryDeployParams,\n AppFactoryParams,\n CreateSchema,\n} from \"@algorandfoundation/algokit-utils/types/app-factory\";\nimport {\n TransactionComposer,\n AppCallMethodCall,\n AppMethodCallTransactionArgument,\n SimulateOptions,\n RawSimulateOptions,\n SkipSignaturesSimulateOptions,\n} from \"@algorandfoundation/algokit-utils/types/composer\";\nimport {\n SendParams,\n SendSingleTransactionResult,\n SendAtomicTransactionComposerResults,\n} from \"@algorandfoundation/algokit-utils/types/transaction\";\nimport { Address, encodeAddress, modelsv2, OnApplicationComplete, Transaction, TransactionSigner } from \"algosdk\";\n\nexport const APP_SPEC: Arc56Contract = {\n name: \"Pool\",\n structs: {},\n methods: [\n {\n name: \"createApplication\",\n args: [\n { type: \"address\", name: \"owner\" },\n { type: \"address\", name: \"router\" },\n { type: \"uint64\", name: \"a\" },\n { type: \"uint64\", name: \"asset\" },\n { type: \"uint64\", name: \"feeShareBP\" },\n { type: \"uint64\", name: \"balanceRatioMinBP\" },\n ],\n returns: { type: \"void\" },\n actions: { create: [\"NoOp\"], call: [] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"optInToApplication\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"OptIn\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"closeOutOfApplication\",\n args: [\n { type: \"uint64\", name: \"budget\", defaultValue: { source: \"literal\", data: \"AAAAAAAAC7g=\", type: \"uint64\" } },\n ],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"CloseOut\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Withdraw\",\n args: [\n { type: \"address\", name: \"from\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"optInAsset\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n desc: \"Opt-in the application account to the ASA stored in `this.asset`.\\nThis performs an inner axfer of 0 to the app's own address.\\nCall once after deploy (or whenever you change the asset).\",\n events: [],\n recommendations: {},\n },\n {\n name: \"deposit\",\n args: [\n { type: \"axfer\", name: \"assetTransferRef\" },\n { type: \"uint64\", name: \"budget\", defaultValue: { source: \"literal\", data: \"AAAAAAAAC7g=\", type: \"uint64\" } },\n ],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\", \"OptIn\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Deposit\",\n args: [\n { type: \"address\", name: \"to\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"withdraw\",\n args: [\n { type: \"uint64\", name: \"amountLp\", desc: \"The Withdrawn amount\" },\n { type: \"uint64\", name: \"budget\", defaultValue: { source: \"literal\", data: \"AAAAAAAAC7g=\", type: \"uint64\" } },\n ],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Withdraw\",\n args: [\n { type: \"address\", name: \"from\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"swapToVUsd\",\n args: [\n { type: \"address\", name: \"user\", desc: \"The address of the sender.\" },\n { type: \"uint64\", name: \"amount\", desc: \"The amount of tokens to swap.\" },\n {\n type: \"bool\",\n name: \"zeroFee\",\n desc: \"When true it allows to swap without incurring any fees. It is intended for use with service\\naccounts.\",\n },\n ],\n returns: { type: \"uint64\", desc: \"returns the difference between the old and the new value of vUsdBalance\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"SwappedToVUsd\",\n args: [\n { type: \"address\", name: \"sender\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"swapFromVUsd\",\n args: [\n { type: \"address\", name: \"user\", desc: \"The address of the recipient.\" },\n { type: \"uint64\", name: \"amount\", desc: \"The amount of vUSD to swap.\" },\n {\n type: \"uint64\",\n name: \"receiveAmountMin\",\n desc: \"The minimum amount of tokens required to be received during the swap, otherwise the\\ntransaction reverts.\",\n },\n {\n type: \"bool\",\n name: \"zeroFee\",\n desc: \"When true it allows to swap without incurring any fees. It is intended for use with service\\naccounts.\",\n },\n ],\n returns: { type: \"uint64\", desc: \"returns the difference between the old and the new value of vUsdBalance\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"SwappedFromVUsd\",\n args: [\n { type: \"address\", name: \"recipient\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"setFeeShare\",\n args: [{ type: \"uint64\", name: \"feeShareBP\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"adjustTotalLpAmount\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Deposit\",\n args: [\n { type: \"address\", name: \"to\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"setBalanceRatioMinBP\",\n args: [{ type: \"uint64\", name: \"balanceRatioMinBP\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"stopDeposit\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"startDeposit\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"stopWithdraw\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"startWithdraw\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"setStopAuthority\",\n args: [{ type: \"address\", name: \"stopAuthority\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"setRouter\",\n args: [{ type: \"address\", name: \"router\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"claimRewards\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n ],\n recommendations: {},\n },\n {\n name: \"setAdminFeeShare\",\n args: [{ type: \"uint64\", name: \"adminFeeShareBP\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"claimAdminFee\",\n args: [],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n {\n name: \"pendingReward\",\n args: [{ type: \"address\", name: \"user\" }],\n returns: { type: \"uint64\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: true,\n events: [],\n recommendations: {},\n },\n {\n name: \"transferOwnership\",\n args: [{ type: \"address\", name: \"newOwner\" }],\n returns: { type: \"void\" },\n actions: { create: [], call: [\"NoOp\"] },\n readonly: false,\n events: [],\n recommendations: {},\n },\n ],\n arcs: [22, 28],\n desc: \"4AD - D = 4A(x + y) - (D³ / 4xy)\\nX - is value of real stable token\\nY - is value of virtual usd\",\n networks: {},\n state: {\n schema: { global: { ints: 15, bytes: 4 }, local: { ints: 2, bytes: 0 } },\n keys: {\n global: {\n feeShareBP: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"ZmVlU2hhcmVCUA==\" },\n router: { keyType: \"AVMString\", valueType: \"address\", key: \"cm91dGVy\" },\n tokenBalance: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG9rZW5CYWxhbmNl\" },\n vUsdBalance: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dlVzZEJhbGFuY2U=\" },\n balanceRatioMinBP: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YmFsYW5jZVJhdGlvTWluQlA=\" },\n reserves: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"cmVzZXJ2ZXM=\" },\n a: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YQ==\" },\n d: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"ZA==\" },\n tokenAmountReduce: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG9rZW5BbW91bnRSZWR1Y2U=\" },\n tokenAmountIncrease: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG9rZW5BbW91bnRJbmNyZWFzZQ==\" },\n stopAuthority: { keyType: \"AVMString\", valueType: \"address\", key: \"c3RvcEF1dGhvcml0eQ==\" },\n canDeposit: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"Y2FuRGVwb3NpdA==\" },\n canWithdraw: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"Y2FuV2l0aGRyYXc=\" },\n asset: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YXNzZXQ=\" },\n adminFeeShareBP: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YWRtaW5GZWVTaGFyZUJQ\" },\n totalSupply: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dG90YWxTdXBwbHk=\" },\n accRewardPerShareP: { keyType: \"AVMString\", valueType: \"AVMBytes\", key: \"YWNjUmV3YXJkUGVyU2hhcmVQ\" },\n adminFeeAmount: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YWRtaW5GZWVBbW91bnQ=\" },\n owner: { keyType: \"AVMString\", valueType: \"address\", key: \"b3duZXI=\" },\n },\n local: {\n balance: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"YmFsYW5jZQ==\" },\n userRewardDebt: { keyType: \"AVMString\", valueType: \"AVMUint64\", key: \"dXNlclJld2FyZERlYnQ=\" },\n },\n box: {},\n },\n maps: { global: {}, local: {}, box: {} },\n },\n bareActions: { create: [], call: [] },\n sourceInfo: {\n approval: {\n sourceInfo: [\n { pc: [2040], errorMessage: '\"Pool: withdraw prohibited' },\n { pc: [984], errorMessage: \"Asset must go to app\" },\n { pc: [998], errorMessage: \"CloseTo not allowed\" },\n { pc: [548], errorMessage: \"OnCompletion must be CloseOut && can only call when not creating\" },\n { pc: [372], errorMessage: \"OnCompletion must be NoOp\" },\n { pc: [559], errorMessage: \"OnCompletion must be OptIn && can only call when not creating\" },\n { pc: [536], errorMessage: \"OnCompletion must be one of NoOp, OptIn && can only call when not creating\" },\n { pc: [3277], errorMessage: \"Only owner\" },\n { pc: [955], errorMessage: \"Pool: deposit prohibited\" },\n { pc: [1959], errorMessage: \"Pool: is not stopAuthority\" },\n { pc: [2024], errorMessage: \"Pool: low token balance\" },\n { pc: [2000], errorMessage: \"Pool: low vUSD balance\" },\n { pc: [1949], errorMessage: \"Pool: only router\" },\n { pc: [1480, 2289], errorMessage: \"Pool: reserves\" },\n { pc: [1521], errorMessage: \"Pool: slippage\" },\n { pc: [1605, 1667], errorMessage: \"Pool: too large\" },\n { pc: [1008], errorMessage: \"Pool: too little\" },\n { pc: [1100], errorMessage: \"Pool: too much\" },\n { pc: [2308], errorMessage: \"Pool: zero D changes\" },\n { pc: [2278], errorMessage: \"Pool: zero changes\" },\n { pc: [991], errorMessage: \"Rekey not allowed\" },\n { pc: [855], errorMessage: \"RewardManager: claim rewards before close out\" },\n { pc: [2061], errorMessage: \"RewardManager: not enough amount\" },\n { pc: [1851], errorMessage: \"RewardManager: too high\" },\n { pc: [850], errorMessage: \"RewardManager: withdraw LP before close out\" },\n { pc: [977], errorMessage: \"Wrong asset\" },\n { pc: [757], errorMessage: \"asset exists\" },\n {\n pc: [\n 750, 865, 954, 966, 975, 1013, 1028, 1038, 1057, 1067, 1081, 1091, 1106, 1144, 1243, 1274, 1285, 1294, 1304,\n 1312, 1329, 1426, 1449, 1471, 1496, 1526, 1549, 1623, 1634, 1767, 1804, 1869, 1877, 1882, 1947, 1957, 1971,\n 1981, 1998, 2022, 2039, 2045, 2069, 2122, 2154, 2206, 2210, 2248, 2275, 2283, 2304, 2313, 2349, 2358, 2506,\n 2511, 2519, 2627, 2635, 2676, 2684, 3037, 3065, 3073, 3091, 3111, 3125, 3186, 3220, 3275,\n ],\n errorMessage: \"check GlobalState exists\",\n },\n {\n pc: [832, 848, 1757, 1784, 2056, 2093, 2108, 3031, 3051, 3136, 3158, 3172],\n errorMessage: \"check LocalState exists\",\n },\n { pc: [1220, 1407], errorMessage: \"invalid number of bytes for arc4.bool\" },\n {\n pc: [669, 677, 1202, 1379, 1717, 1734, 1912, 1931],\n errorMessage: \"invalid number of bytes for arc4.static_array<arc4.uint8, 32>\",\n },\n {\n pc: [685, 694, 703, 712, 820, 932, 1177, 1186, 1210, 1387, 1397, 1596, 1658, 1842],\n errorMessage: \"invalid number of bytes for arc4.uint64\",\n },\n { pc: [2724], errorMessage: \"n must be non-negative\" },\n { pc: [1127, 1158, 2230, 2262], errorMessage: \"overflow\" },\n { pc: [924], errorMessage: \"transaction type is axfer\" },\n ],\n pcOffsetMethod: \"none\",\n },\n clear: { sourceInfo: [], pcOffsetMethod: \"none\" },\n },\n source: {\n approval:\n \"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYXJjNC9pbmRleC5kLnRzOjpDb250cmFjdC5hcHByb3ZhbFByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBpbnRjYmxvY2sgMCAxIDggMzIgMTAwMDAKICAgIGJ5dGVjYmxvY2sgInRva2VuQmFsYW5jZSIgInZVc2RCYWxhbmNlIiAiYXNzZXQiICJiYWxhbmNlIiAicmVzZXJ2ZXMiICJ1c2VyUmV3YXJkRGVidCIgImQiICJ0b3RhbFN1cHBseSIgImFjY1Jld2FyZFBlclNoYXJlUCIgMHgwMTAwMDAwMDAwMDAwMCAweDAxICJhZG1pbkZlZUFtb3VudCIgImNhbkRlcG9zaXQiICJjYW5XaXRoZHJhdyIgIm93bmVyIiAiZmVlU2hhcmVCUCIgImJhbGFuY2VSYXRpb01pbkJQIiAweDAyICJhZG1pbkZlZVNoYXJlQlAiICJhIiAicm91dGVyIiAic3RvcEF1dGhvcml0eSIgInRva2VuQW1vdW50UmVkdWNlIiAidG9rZW5BbW91bnRJbmNyZWFzZSIgMHgxNTFmN2M3NSAweGJhODE4MDc2IDB4MDMgMHgwNjgxMDEgMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIHR4biBBcHBsaWNhdGlvbklECiAgICBibnogbWFpbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICBwdXNoaW50IDIwMDAgLy8gMjAwMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgcHVzaGJ5dGVzIDB4CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgaW50Y18wIC8vIDAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIGludGNfMSAvLyAxCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKCm1haW5fYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzgKICAgIC8vIGV4cG9ydCBjbGFzcyBQb29sIGV4dGVuZHMgUmV3YXJkTWFuYWdlciBpbXBsZW1lbnRzIENvbnZlbnRpb25hbFJvdXRpbmcgewogICAgcHVzaGJ5dGVzcyAweDAxYTNhM2ZmIDB4MDQ1OWI3YWMgMHg5YjRiODIzNCAvLyBtZXRob2QgIm9wdEluVG9BcHBsaWNhdGlvbigpdm9pZCIsIG1ldGhvZCAiY2xvc2VPdXRPZkFwcGxpY2F0aW9uKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJkZXBvc2l0KGF4ZmVyLHVpbnQ2NCl2b2lkIgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAogICAgbWF0Y2ggbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANCBtYWluX2Nsb3NlT3V0T2ZBcHBsaWNhdGlvbl9yb3V0ZUA1IG1haW5fZGVwb3NpdF9yb3V0ZUA2CgptYWluX3N3aXRjaF9jYXNlX25leHRANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4CiAgICAvLyBleHBvcnQgY2xhc3MgUG9vbCBleHRlbmRzIFJld2FyZE1hbmFnZXIgaW1wbGVtZW50cyBDb252ZW50aW9uYWxSb3V0aW5nIHsKICAgIHR4biBPbkNvbXBsZXRpb24KICAgICEKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBOb09wCiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgYnogbWFpbl9jcmVhdGVfTm9PcEAyOAogICAgcHVzaGJ5dGVzcyAweDc2MTBhNDYwIDB4ZTNhZWIyNWMgMHhkOTc4YWQxNCAweDBkMWI0YzA2IDB4NzViZjlhMjggMHhmNDkzZDdlZCAweDhkNWNiNmRmIDB4ZmUwNGE1Y2UgMHgwMjhlMDg1OSAweDQxZmM5NjZlIDB4YWJmMjAwMTQgMHgwNGIxNjFmMSAweDY2NTkxY2NmIDB4YTVhZTZiZDEgMHhhMDRjNWJjNCAweDM2MWI2MTU5IDB4NTM4ZTkxMjcgMHhlMTdiYWZiNCAvLyBtZXRob2QgIm9wdEluQXNzZXQoKXZvaWQiLCBtZXRob2QgIndpdGhkcmF3KHVpbnQ2NCx1aW50NjQpdm9pZCIsIG1ldGhvZCAic3dhcFRvVlVzZChhZGRyZXNzLHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic3dhcEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCxib29sKXVpbnQ2NCIsIG1ldGhvZCAic2V0RmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImFkanVzdFRvdGFsTHBBbW91bnQoKXZvaWQiLCBtZXRob2QgInNldEJhbGFuY2VSYXRpb01pbkJQKHVpbnQ2NCl2b2lkIiwgbWV0aG9kICJzdG9wRGVwb3NpdCgpdm9pZCIsIG1ldGhvZCAic3RhcnREZXBvc2l0KCl2b2lkIiwgbWV0aG9kICJzdG9wV2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInN0YXJ0V2l0aGRyYXcoKXZvaWQiLCBtZXRob2QgInNldFN0b3BBdXRob3JpdHkoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJzZXRSb3V0ZXIoYWRkcmVzcyl2b2lkIiwgbWV0aG9kICJjbGFpbVJld2FyZHMoKXZvaWQiLCBtZXRob2QgInNldEFkbWluRmVlU2hhcmUodWludDY0KXZvaWQiLCBtZXRob2QgImNsYWltQWRtaW5GZWUoKXZvaWQiLCBtZXRob2QgInBlbmRpbmdSZXdhcmQoYWRkcmVzcyl1aW50NjQiLCBtZXRob2QgInRyYW5zZmVyT3duZXJzaGlwKGFkZHJlc3Mpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIG9wdEluQXNzZXQgd2l0aGRyYXcgc3dhcFRvVlVzZCBzd2FwRnJvbVZVc2Qgc2V0RmVlU2hhcmUgYWRqdXN0VG90YWxMcEFtb3VudCBzZXRCYWxhbmNlUmF0aW9NaW5CUCBzdG9wRGVwb3NpdCBzdGFydERlcG9zaXQgc3RvcFdpdGhkcmF3IHN0YXJ0V2l0aGRyYXcgc2V0U3RvcEF1dGhvcml0eSBzZXRSb3V0ZXIgY2xhaW1SZXdhcmRzIHNldEFkbWluRmVlU2hhcmUgY2xhaW1BZG1pbkZlZSBwZW5kaW5nUmV3YXJkIHRyYW5zZmVyT3duZXJzaGlwCiAgICBlcnIKCm1haW5fY3JlYXRlX05vT3BAMjg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOAogICAgLy8gZXhwb3J0IGNsYXNzIFBvb2wgZXh0ZW5kcyBSZXdhcmRNYW5hZ2VyIGltcGxlbWVudHMgQ29udmVudGlvbmFsUm91dGluZyB7CiAgICBwdXNoYnl0ZXMgMHg1MTZkMzQ3YiAvLyBtZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKGFkZHJlc3MsYWRkcmVzcyx1aW50NjQsdWludDY0LHVpbnQ2NCx1aW50NjQpdm9pZCIKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDAKICAgIG1hdGNoIGNyZWF0ZUFwcGxpY2F0aW9uCiAgICBlcnIKCm1haW5fZGVwb3NpdF9yb3V0ZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgdHhuIE9uQ29tcGxldGlvbgogICAgc2hsCiAgICBwdXNoaW50IDMgLy8gMwogICAgJgogICAgdHhuIEFwcGxpY2F0aW9uSUQKICAgICYmCiAgICBhc3NlcnQgLy8gT25Db21wbGV0aW9uIG11c3QgYmUgb25lIG9mIE5vT3AsIE9wdEluICYmIGNhbiBvbmx5IGNhbGwgd2hlbiBub3QgY3JlYXRpbmcKICAgIGIgZGVwb3NpdAoKbWFpbl9jbG9zZU91dE9mQXBwbGljYXRpb25fcm91dGVANToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBwdXNoaW50IDIgLy8gQ2xvc2VPdXQKICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBDbG9zZU91dCAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIGNsb3NlT3V0T2ZBcHBsaWNhdGlvbgoKbWFpbl9vcHRJblRvQXBwbGljYXRpb25fcm91dGVANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjczCiAgICAvLyBvcHRJblRvQXBwbGljYXRpb24oKTogdm9pZCB7CiAgICB0eG4gT25Db21wbGV0aW9uCiAgICBpbnRjXzEgLy8gT3B0SW4KICAgID09CiAgICB0eG4gQXBwbGljYXRpb25JRAogICAgJiYKICAgIGFzc2VydCAvLyBPbkNvbXBsZXRpb24gbXVzdCBiZSBPcHRJbiAmJiBjYW4gb25seSBjYWxsIHdoZW4gbm90IGNyZWF0aW5nCiAgICBiIG9wdEluVG9BcHBsaWNhdGlvbgoKCi8vIF9wdXlhX2xpYi51dGlsLmVuc3VyZV9idWRnZXQocmVxdWlyZWRfYnVkZ2V0OiB1aW50NjQsIGZlZV9zb3VyY2U6IHVpbnQ2NCkgLT4gdm9pZDoKZW5zdXJlX2J1ZGdldDoKICAgIHByb3RvIDIgMAogICAgZnJhbWVfZGlnIC0yCiAgICBwdXNoaW50IDEwIC8vIDEwCiAgICArCgplbnN1cmVfYnVkZ2V0X3doaWxlX3RvcEAxOgogICAgZnJhbWVfZGlnIDAKICAgIGdsb2JhbCBPcGNvZGVCdWRnZXQKICAgID4KICAgIGJ6IGVuc3VyZV9idWRnZXRfYWZ0ZXJfd2hpbGVANgogICAgaXR4bl9iZWdpbgogICAgcHVzaGludCA2IC8vIGFwcGwKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIHB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgogICAgaXR4bl9maWVsZCBPbkNvbXBsZXRpb24KICAgIGJ5dGVjIDI3IC8vIDB4MDY4MTAxCiAgICBpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQogICAgYnl0ZWMgMjcgLy8gMHgwNjgxMDEKICAgIGl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KICAgIGZyYW1lX2RpZyAtMQogICAgc3dpdGNoIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0CgplbnN1cmVfYnVkZ2V0X3N3aXRjaF9jYXNlX25leHRANToKICAgIGl0eG5fc3VibWl0CiAgICBiIGVuc3VyZV9idWRnZXRfd2hpbGVfdG9wQDEKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMUA0OgogICAgZ2xvYmFsIE1pblR4bkZlZQogICAgaXR4bl9maWVsZCBGZWUKICAgIGIgZW5zdXJlX2J1ZGdldF9zd2l0Y2hfY2FzZV9uZXh0QDUKCmVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfMEAzOgogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBiIGVuc3VyZV9idWRnZXRfc3dpdGNoX2Nhc2VfbmV4dEA1CgplbnN1cmVfYnVkZ2V0X2FmdGVyX3doaWxlQDY6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6OmJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh2OiBieXRlcykgLT4gdWludDY0OgpiaWd1aW50VG9VaW50NjRNb2R1bG86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTUKICAgIC8vIGV4cG9ydCBmdW5jdGlvbiBiaWd1aW50VG9VaW50NjRNb2R1bG8odjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoxNwogICAgLy8gY29uc3QgbGVuID0gb3AubGVuKGIpOwogICAgZnJhbWVfZGlnIC0xCiAgICBsZW4KICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE4CiAgICAvLyBjb25zdCBzdGFydDogdWludDY0ID0gbGVuID4gOCA/IChsZW4gLSA4KSA6IDA7CiAgICBpbnRjXzIgLy8gOAogICAgPgogICAgYnogYmlndWludFRvVWludDY0TW9kdWxvX3Rlcm5hcnlfZmFsc2VAMgogICAgZnJhbWVfZGlnIDAKICAgIGludGNfMiAvLyA4CiAgICAtCgpiaWd1aW50VG9VaW50NjRNb2R1bG9fdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjE5CiAgICAvLyBjb25zdCBsYXN0OCA9IGIuc2xpY2Uoc3RhcnQpOyAgICAgICAgICAgLy8ga2VlcCBsZWFzdC1zaWduaWZpY2FudCA4IGJ5dGVzCiAgICBkdXAKICAgIGZyYW1lX2RpZyAwCiAgICBkdXAKICAgIGNvdmVyIDMKICAgID49CiAgICBkaWcgMgogICAgc3dhcAogICAgc2VsZWN0CiAgICBmcmFtZV9kaWcgLTEKICAgIHN3YXAKICAgIHVuY292ZXIgMgogICAgc3Vic3RyaW5nMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy91dGlscy5hbGdvLnRzOjIwCiAgICAvLyByZXR1cm4gb3AuYnRvaShsYXN0OCk7ICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGNvbnZlcnQgdG8gdWludDY0CiAgICBidG9pCiAgICBzd2FwCiAgICByZXRzdWIKCmJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X2ZhbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MTgKICAgIC8vIGNvbnN0IHN0YXJ0OiB1aW50NjQgPSBsZW4gPiA4ID8gKGxlbiAtIDgpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsb190ZXJuYXJ5X21lcmdlQDMKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5jcmVhdGVBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNyZWF0ZUFwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjAKICAgIC8vIGNyZWF0ZUFwcGxpY2F0aW9uKG93bmVyOiBBZGRyZXNzLCByb3V0ZXI6IEFkZHJlc3MsIGE6IHVpbnQ2NCwgYXNzZXQ6IEFzc2V0LCBmZWVTaGFyZUJQOiB1aW50NjQsIGJhbGFuY2VSYXRpb01pbkJQOiB1aW50NjQpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAzCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA0CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA1CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyA2CiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo2CiAgICAvLyBwcm90ZWN0ZWQgb3duZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOwogICAgYnl0ZWMgMTQgLy8gIm93bmVyIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6OQogICAgLy8gdGhpcy5vd25lci52YWx1ZSA9IG93bmVyOwogICAgZGlnIDYKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozOAogICAgLy8gdGhpcy5hc3NldC52YWx1ZSA9IGFzc2V0OwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAKICAgIC8vIGEgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxOSAvLyAiYSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYyCiAgICAvLyB0aGlzLmEudmFsdWUgPSBhOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDUKICAgIC8vIHJvdXRlciA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMjAgLy8gInJvdXRlciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjYzCiAgICAvLyB0aGlzLnJvdXRlci52YWx1ZSA9IHJvdXRlcjsKICAgIHVuY292ZXIgMwogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU2CiAgICAvLyBwcml2YXRlIHN0b3BBdXRob3JpdHkgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGNhbiByZXN0cmljdCBkZXBvc2l0IG9yIHdpdGhkcmF3IG9wZXJhdGlvbnMKICAgIGJ5dGVjIDIxIC8vICJzdG9wQXV0aG9yaXR5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjQKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IG93bmVyOwogICAgdW5jb3ZlciAzCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjY1CiAgICAvLyB0aGlzLmZlZVNoYXJlQlAudmFsdWUgPSBmZWVTaGFyZUJQOwogICAgdW5jb3ZlciAyCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjYKICAgIC8vIHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUgPSBiYWxhbmNlUmF0aW9NaW5CUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OAogICAgLy8gY29uc3QgZGVjaW1hbHMgPSB0aGlzLmFzc2V0LnZhbHVlLmRlY2ltYWxzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjgKICAgIC8vIGNvbnN0IGRlY2ltYWxzID0gdGhpcy5hc3NldC52YWx1ZS5kZWNpbWFsczsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBhc3NldF9wYXJhbXNfZ2V0IEFzc2V0RGVjaW1hbHMKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gYXNzZXQgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHB1c2hpbnQgMyAvLyAzCiAgICA+CiAgICBieiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X2ZhbHNlQDMKICAgIGR1cAogICAgcHVzaGludCAzIC8vIDMKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTMKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRSZWR1Y2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAyMiAvLyAidG9rZW5BbW91bnRSZWR1Y2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2OQogICAgLy8gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZSA9IGRlY2ltYWxzID4gU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChkZWNpbWFscyAtIFNZU1RFTV9QUkVDSVNJT04pIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MAogICAgLy8gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlID0gZGVjaW1hbHMgPCBTWVNURU1fUFJFQ0lTSU9OID8gMTAgKiogKFNZU1RFTV9QUkVDSVNJT04gLSBkZWNpbWFscykgOiAwOwogICAgZHVwCiAgICBwdXNoaW50IDMgLy8gMwogICAgPAogICAgYnogY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2CiAgICBwdXNoaW50IDMgLy8gMwogICAgZGlnIDEKICAgIC0KICAgIHB1c2hpbnQgMTAgLy8gMTAKICAgIHN3YXAKICAgIGV4cAoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9tZXJnZUA3OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo2MAogICAgLy8gY3JlYXRlQXBwbGljYXRpb24ob3duZXI6IEFkZHJlc3MsIHJvdXRlcjogQWRkcmVzcywgYTogdWludDY0LCBhc3NldDogQXNzZXQsIGZlZVNoYXJlQlA6IHVpbnQ2NCwgYmFsYW5jZVJhdGlvTWluQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NzAKICAgIC8vIHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZSA9IGRlY2ltYWxzIDwgU1lTVEVNX1BSRUNJU0lPTiA/IDEwICoqIChTWVNURU1fUFJFQ0lTSU9OIC0gZGVjaW1hbHMpIDogMDsKICAgIGludGNfMCAvLyAwCiAgICBiIGNyZWF0ZUFwcGxpY2F0aW9uX3Rlcm5hcnlfbWVyZ2VANwoKY3JlYXRlQXBwbGljYXRpb25fdGVybmFyeV9mYWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NjkKICAgIC8vIHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWUgPSBkZWNpbWFscyA+IFNZU1RFTV9QUkVDSVNJT04gPyAxMCAqKiAoZGVjaW1hbHMgLSBTWVNURU1fUFJFQ0lTSU9OKSA6IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYiBjcmVhdGVBcHBsaWNhdGlvbl90ZXJuYXJ5X21lcmdlQDQKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5vcHRJblRvQXBwbGljYXRpb25bcm91dGluZ10oKSAtPiB2b2lkOgpvcHRJblRvQXBwbGljYXRpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3NAogICAgLy8gc3VwZXIub3B0SW5Ub0FwcGxpY2F0aW9uKFR4bi5zZW5kZXIpOwogICAgdHhuIFNlbmRlcgogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo3MwogICAgLy8gb3B0SW5Ub0FwcGxpY2F0aW9uKCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmNsb3NlT3V0T2ZBcHBsaWNhdGlvbltyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsb3NlT3V0T2ZBcHBsaWNhdGlvbjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo4NgogICAgLy8gY29uc3Qgc2VuZGVyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6ODgKICAgIC8vIGNvbnN0IGxwQmFsYW5jZTogdWludDY0ID0gdGhpcy5iYWxhbmNlKHNlbmRlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo5MAogICAgLy8gaWYgKGxwQmFsYW5jZSA+IDApIHsKICAgIGJ6IGNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLndpdGhkcmF3KGxwQmFsYW5jZSwgYnVkZ2V0KTsKICAgIGR1cAogICAgZGlnIDMKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXcKCmNsb3NlT3V0T2ZBcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDM6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NTEKICAgIC8vIGNvbnN0IGxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlOwogICAgZGlnIDEKICAgIGR1cAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MQogICAgLy8gY29uc3QgbHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1MgogICAgLy8gYXNzZXJ0KGxwQW1vdW50ID09PSAwLCAnUmV3YXJkTWFuYWdlcjogd2l0aGRyYXcgTFAgYmVmb3JlIGNsb3NlIG91dCcpOwogICAgIQogICAgYXNzZXJ0IC8vIFJld2FyZE1hbmFnZXI6IHdpdGhkcmF3IExQIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NAogICAgLy8gY29uc3QgcGVuZGluZyA9IHRoaXMucGVuZGluZ1Jld2FyZChmcm9tKTsKICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo1NQogICAgLy8gYXNzZXJ0KHBlbmRpbmcgPT09IDAsICdSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQnKTsKICAgICEKICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiBjbGFpbSByZXdhcmRzIGJlZm9yZSBjbG9zZSBvdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjg0CiAgICAvLyBAYWJpbWV0aG9kKHsgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub3B0SW5Bc3NldFtyb3V0aW5nXSgpIC0+IHZvaWQ6Cm9wdEluQXNzZXQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTA2LTExMgogICAgLy8gaXR4bgogICAgLy8gICAuYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICAgIGFzc2V0QW1vdW50OiAwLAogICAgLy8gICAgIGFzc2V0UmVjZWl2ZXI6IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLAogICAgLy8gICB9KQogICAgLy8gICAuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDgKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEwOAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjExMAogICAgLy8gYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICBnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwogICAgaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDkKICAgIC8vIGFzc2V0QW1vdW50OiAwLAogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTExCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDYtMTEyCiAgICAvLyBpdHhuCiAgICAvLyAgIC5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgICAgYXNzZXRBbW91bnQ6IDAsCiAgICAvLyAgICAgYXNzZXRSZWNlaXZlcjogR2xvYmFsLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MsCiAgICAvLyAgIH0pCiAgICAvLyAgIC5zdWJtaXQoKTsKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTQKICAgIC8vIGxvZygnUG9vbDogb3B0LWluIGNvbXBsZXRlZCcpOwogICAgcHVzaGJ5dGVzICJQb29sOiBvcHQtaW4gY29tcGxldGVkIgogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMDIKICAgIC8vIG9wdEluQXNzZXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuZGVwb3NpdFtyb3V0aW5nXSgpIC0+IHZvaWQ6CmRlcG9zaXQ6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cG4gNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTUwCiAgICAvLyBAYWJpbWV0aG9kKHsgYWxsb3dBY3Rpb25zOiBbJ05vT3AnLCAnT3B0SW4nXSwgZGVmYXVsdEFyZ3VtZW50czogeyBidWRnZXQ6IHsgY29uc3RhbnQ6IDMwMDAgfSB9IH0pCiAgICB0eG4gR3JvdXBJbmRleAogICAgaW50Y18xIC8vIDEKICAgIC0KICAgIGR1cAogICAgZ3R4bnMgVHlwZUVudW0KICAgIHB1c2hpbnQgNCAvLyBheGZlcgogICAgPT0KICAgIGFzc2VydCAvLyB0cmFuc2FjdGlvbiB0eXBlIGlzIGF4ZmVyCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNTIKICAgIC8vIGVuc3VyZUJ1ZGdldChidWRnZXQsIE9wVXBGZWVTb3VyY2UuR3JvdXBDcmVkaXQpOwogICAgaW50Y18wIC8vIDAKICAgIGNhbGxzdWIgZW5zdXJlX2J1ZGdldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU1CiAgICAvLyBpZiAoVHhuLm9uQ29tcGxldGlvbiA9PT0gT25Db21wbGV0ZUFjdGlvbi5PcHRJbikgewogICAgdHhuIE9uQ29tcGxldGlvbgogICAgaW50Y18xIC8vIDEKICAgID09CiAgICBieiBkZXBvc2l0X2FmdGVyX2lmX2Vsc2VAMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTU2CiAgICAvLyBzdXBlci5vcHRJblRvQXBwbGljYXRpb24oVHhuLnNlbmRlcik7CiAgICB0eG4gU2VuZGVyCiAgICBjYWxsc3ViIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24KCmRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM5CiAgICAvLyBhc3NlcnQodGhpcy5jYW5EZXBvc2l0LnZhbHVlLCAnUG9vbDogZGVwb3NpdCBwcm9oaWJpdGVkJyk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzOQogICAgLy8gYXNzZXJ0KHRoaXMuY2FuRGVwb3NpdC52YWx1ZSwgJ1Bvb2w6IGRlcG9zaXQgcHJvaGliaXRlZCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGFzc2VydCAvLyBQb29sOiBkZXBvc2l0IHByb2hpYml0ZWQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MQogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTYxCiAgICAvLyBjb25zdCBvbGREID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjMKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyUmVmLnhmZXJBc3NldC5pZCA9PT0gdGhpcy5hc3NldC52YWx1ZS5pZCwgYFdyb25nIGFzc2V0YCk7CiAgICBkaWcgMQogICAgZHVwCiAgICBndHhucyBYZmVyQXNzZXQKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2MwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJSZWYueGZlckFzc2V0LmlkID09PSB0aGlzLmFzc2V0LnZhbHVlLmlkLCBgV3JvbmcgYXNzZXRgKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIFdyb25nIGFzc2V0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjQKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0UmVjZWl2ZXIgPT09IEdsb2JhbC5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLCBgQXNzZXQgbXVzdCBnbyB0byBhcHBgKTsKICAgIGR1cAogICAgZ3R4bnMgQXNzZXRSZWNlaXZlcgogICAgZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKICAgID09CiAgICBhc3NlcnQgLy8gQXNzZXQgbXVzdCBnbyB0byBhcHAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvdXRpbHMuYWxnby50czoyNwogICAgLy8gYXNzZXJ0KGFzc2V0VHJhbnNmZXJUeG4ucmVrZXlUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgUmVrZXkgbm90IGFsbG93ZWRgKTsKICAgIGR1cAogICAgZ3R4bnMgUmVrZXlUbwogICAgZ2xvYmFsIFplcm9BZGRyZXNzCiAgICA9PQogICAgYXNzZXJ0IC8vIFJla2V5IG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjgKICAgIC8vIGFzc2VydChhc3NldFRyYW5zZmVyVHhuLmFzc2V0Q2xvc2VUbyA9PT0gR2xvYmFsLnplcm9BZGRyZXNzLCBgQ2xvc2VUbyBub3QgYWxsb3dlZGApOwogICAgZHVwCiAgICBndHhucyBBc3NldENsb3NlVG8KICAgIGdsb2JhbCBaZXJvQWRkcmVzcwogICAgPT0KICAgIGFzc2VydCAvLyBDbG9zZVRvIG5vdCBhbGxvd2VkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3V0aWxzLmFsZ28udHM6MjkKICAgIC8vIHJldHVybiBhc3NldFRyYW5zZmVyVHhuLmFzc2V0QW1vdW50OwogICAgZ3R4bnMgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2NQogICAgLy8gY29uc3QgYW1vdW50U1AgPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCk7CiAgICBjYWxsc3ViIHRvU3lzdGVtUHJlY2lzaW9uCiAgICBkdXAKICAgIGJ1cnkgOAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY2CiAgICAvLyBhc3NlcnQoYW1vdW50U1AgPiAwLCAnUG9vbDogdG9vIGxpdHRsZScpOwogICAgZHVwCiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIGxpdHRsZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTY5CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudFNQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE2OQogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRTUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNjkKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50U1A7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTcxCiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBidXJ5IDYKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3MgogICAgLy8gY29uc3QgdlVzZEJhbGFuY2UgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSA2CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzQKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICArCiAgICBidXJ5IDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3NQogICAgLy8gaWYgKG9sZEQgPT09IDAgfHwgb2xkQmFsYW5jZSA9PT0gMCkgewogICAgYnogZGVwb3NpdF9pZl9ib2R5QDUKICAgIGRpZyA0CiAgICBibnogZGVwb3NpdF9lbHNlX2JvZHlANgoKZGVwb3NpdF9pZl9ib2R5QDU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzcKICAgIC8vIGNvbnN0IGhhbGZBbW91bnQ6IHVpbnQ2NCA9IGFtb3VudFNQID4+IDE7CiAgICBkaWcgNQogICAgaW50Y18xIC8vIDEKICAgIHNocgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTc4CiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBoYWxmQW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE3OAogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxNzkKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gaGFsZkFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgpkZXBvc2l0X2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NQogICAgLy8gdGhpcy51cGRhdGVEKCk7CiAgICBjYWxsc3ViIHVwZGF0ZUQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4NwogICAgLy8gdGhpcy5kZXBvc2l0THAoVHhuLnNlbmRlciwgdGhpcy5kLnZhbHVlIC0gb2xkRCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDUKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODkKICAgIC8vIGFzc2VydCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA8IE1BWF9UT0tFTl9CQUxBTkNFLCAnUG9vbDogdG9vIG11Y2gnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4OQogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIDwgTUFYX1RPS0VOX0JBTEFOQ0UsICdQb29sOiB0b28gbXVjaCcpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMTA5OTUxMTYyNzc3NiAvLyAxMDk5NTExNjI3Nzc2CiAgICA8CiAgICBhc3NlcnQgLy8gUG9vbDogdG9vIG11Y2gKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE1MAogICAgLy8gQGFiaW1ldGhvZCh7IGFsbG93QWN0aW9uczogWydOb09wJywgJ09wdEluJ10sIGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKZGVwb3NpdF9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MgogICAgLy8gdGhpcy50b2tlbkJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodG9rZW5CYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgyCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh0b2tlbkJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgIGl0b2IKICAgIGRpZyA0CiAgICBpdG9iCiAgICBkaWcgMQogICAgYioKICAgIGRpZyA3CiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNAogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODIKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxODMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudFNQKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTgzCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlICs9IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRTUCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA1CiAgICBpdG9iCiAgICB1bmNvdmVyIDQKICAgIGIqCiAgICB1bmNvdmVyIDMKICAgIGIvCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgIDw9CiAgICBhc3NlcnQgLy8gb3ZlcmZsb3cKICAgIHVuY292ZXIgMgogICAgYnwKICAgIGJ0b2kKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE4MwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBuZXcgVWludDw2ND4oKEJpZ1VpbnQoYW1vdW50U1ApICogQmlnVWludCh2VXNkQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICBiIGRlcG9zaXRfYWZ0ZXJfaWZfZWxzZUA3CgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdbcm91dGluZ10oKSAtPiB2b2lkOgp3aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5NwogICAgLy8gQGFiaW1ldGhvZCh7IGRlZmF1bHRBcmd1bWVudHM6IHsgYnVkZ2V0OiB7IGNvbnN0YW50OiAzMDAwIH0gfSB9KQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgY2FsbHN1YiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN3YXBUb1ZVc2Rbcm91dGluZ10oKSAtPiB2b2lkOgpzd2FwVG9WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNDUtMjQ5CiAgICAvLyBzd2FwVG9WVXNkKAogICAgLy8gICB1c2VyOiBBZGRyZXNzLAogICAgLy8gICBhbW91bnQ6IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MAogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1MgogICAgLy8gbGV0IHJlc3VsdDogdWludDY0ID0gMDsgLy8gMCBieSBkZWZhdWx0CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjUzCiAgICAvLyBsZXQgZmVlOiB1aW50NjQgPSAwOwogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1NAogICAgLy8gaWYgKGFtb3VudCA+IDApIHsKICAgIGJ6IHN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTUKICAgIC8vIGlmICghemVyb0ZlZSkgewogICAgZGlnIDIKICAgIGJueiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjU2CiAgICAvLyBmZWUgPSAoYW1vdW50ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0CiAgICAvLyBmZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTUgLy8gImZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNTYKICAgIC8vIGZlZSA9IChhbW91bnQgKiB0aGlzLmZlZVNoYXJlQlAudmFsdWUpIC8gQlA7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDQKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgYnVyeSAxCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI1OAogICAgLy8gY29uc3QgYW1vdW50SW4gPSB0aGlzLnRvU3lzdGVtUHJlY2lzaW9uKGFtb3VudCAtIGZlZSk7CiAgICBkaWcgMwogICAgZHVwCiAgICBkaWcgMgogICAgLQogICAgY2FsbHN1YiB0b1N5c3RlbVByZWNpc2lvbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYwCiAgICAvLyBmZWUgPSBhbW91bnQgLSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50SW4pOwogICAgZHVwCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIHVuY292ZXIgMgogICAgc3dhcAogICAgLQogICAgYnVyeSAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjYzCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSArPSBhbW91bnRJbjsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMQogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NAogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSArPSBhbW91bnRJbjsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjQKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgKz0gYW1vdW50SW47CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlICs9IGFtb3VudEluOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NgogICAgLy8gY29uc3QgdlVzZE5ld0Ftb3VudCA9IHRoaXMuZ2V0WSh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjYKICAgIC8vIGNvbnN0IHZVc2ROZXdBbW91bnQgPSB0aGlzLmdldFkodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGNhbGxzdWIgZ2V0WQogICAgZHVwCiAgICBidXJ5IDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI2NwogICAgLy8gaWYgKHRoaXMudlVzZEJhbGFuY2UudmFsdWUgPiB2VXNkTmV3QW1vdW50KSB7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY3CiAgICAvLyBpZiAodGhpcy52VXNkQmFsYW5jZS52YWx1ZSA+IHZVc2ROZXdBbW91bnQpIHsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA8CiAgICBieiBzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjY4CiAgICAvLyByZXN1bHQgPSB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC0gdlVzZE5ld0Ftb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNjgKICAgIC8vIHJlc3VsdCA9IHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLSB2VXNkTmV3QW1vdW50OwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyA2CiAgICAtCiAgICBidXJ5IDIKCnN3YXBUb1ZVc2RfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcwCiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlID0gdlVzZE5ld0Ftb3VudDsKICAgIGRpZyA2CiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjcxCiAgICAvLyB0aGlzLmFkZFJld2FyZHMoZmVlKTsKICAgIGR1cAogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwVG9WVXNkX2FmdGVyX2lmX2Vsc2VANzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI3NAogICAgLy8gZW1pdDxTd2FwcGVkVG9WVXNkPih7IHNlbmRlcjogdXNlciwgdG9rZW5JZDogdGhpcy5hc3NldC52YWx1ZS5pZCwgYW1vdW50LCB2VXNkQW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkaWcgNQogICAgc3dhcAogICAgY29uY2F0CiAgICBkaWcgNAogICAgaXRvYgogICAgY29uY2F0CiAgICBkaWcgMgogICAgaXRvYgogICAgc3dhcAogICAgZGlnIDEKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4MmJiYmVjYTMgLy8gbWV0aG9kICJTd2FwcGVkVG9WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyNzYKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI0NS0yNDkKICAgIC8vIHN3YXBUb1ZVc2QoCiAgICAvLyAgIHVzZXI6IEFkZHJlc3MsCiAgICAvLyAgIGFtb3VudDogdWludDY0LAogICAgLy8gICB6ZXJvRmVlOiBib29sZWFuLAogICAgLy8gKTogdWludDY0IHsKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3dhcEZyb21WVXNkW3JvdXRpbmddKCkgLT4gdm9pZDoKc3dhcEZyb21WVXNkOgogICAgcHVzaGJ5dGVzICIiCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDIKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC51aW50NjQKICAgIGJ0b2kKICAgIGR1cAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgc3dhcAogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgNAogICAgZHVwCiAgICBsZW4KICAgIGludGNfMSAvLyAxCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LmJvb2wKICAgIGludGNfMCAvLyAwCiAgICBnZXRiaXQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5NwogICAgLy8gdGhpcy5vbmx5Um91dGVyKCk7CiAgICBjYWxsc3ViIG9ubHlSb3V0ZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5OQogICAgLy8gbGV0IHJlc3VsdFNQOiB1aW50NjQgPSAwOyAvLyAwIGJ5IGRlZmF1bHQKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDAKICAgIC8vIGxldCByZXN1bHQ6IHVpbnQ2NCA9IDA7IC8vIDAgYnkgZGVmYXVsdAogICAgaW50Y18wIC8vIDAKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMQogICAgLy8gbGV0IGZlZTogdWludDY0ID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBzd2FwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDIKICAgIC8vIGlmIChhbW91bnQgPiAwKSB7CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDMKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgKz0gYW1vdW50OwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDYKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3CiAgICAvLyB2VXNkQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18xIC8vICJ2VXNkQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwMwogICAgLy8gdGhpcy52VXNkQmFsYW5jZS52YWx1ZSArPSBhbW91bnQ7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNAogICAgLy8gY29uc3QgbmV3QW1vdW50ID0gdGhpcy5nZXRZKHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgY2FsbHN1YiBnZXRZCiAgICBkdXAKICAgIGJ1cnkgMTAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMwNQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDUKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgY292ZXIgMgogICAgYnVyeSAxMQogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA2CiAgICAvLyBpZiAodG9rZW5CYWxhbmNlID4gbmV3QW1vdW50KSB7CiAgICA8CiAgICBieiBzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMDcKICAgIC8vIHJlc3VsdFNQID0gdG9rZW5CYWxhbmNlIC0gbmV3QW1vdW50OwogICAgZGlnIDcKICAgIGRpZyA5CiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzA4CiAgICAvLyByZXN1bHQgPSB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24ocmVzdWx0U1ApOwogICAgY2FsbHN1YiBmcm9tU3lzdGVtUHJlY2lzaW9uCiAgICBidXJ5IDIKCnN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMTIKICAgIC8vIGFzc2VydChyZXN1bHRTUCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBkaWcgMwogICAgZHVwCiAgICBjb3ZlciAyCiAgICBkaWcgMQogICAgPD0KICAgIGFzc2VydCAvLyBQb29sOiByZXNlcnZlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDkKICAgIC8vIHJlc2VydmVzID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDQgLy8gInJlc2VydmVzIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE0CiAgICAvLyB0aGlzLnJlc2VydmVzLnZhbHVlIC09IHJlc3VsdFNQOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNQogICAgLy8gaWYgKCF6ZXJvRmVlKSB7CiAgICBkaWcgMwogICAgYm56IHN3YXBGcm9tVlVzZF9hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxNgogICAgLy8gZmVlID0gKHJlc3VsdCAqIHRoaXMuZmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NAogICAgLy8gZmVlU2hhcmVCUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE1IC8vICJmZWVTaGFyZUJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzE2CiAgICAvLyBmZWUgPSAocmVzdWx0ICogdGhpcy5mZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAyCiAgICAqCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgIC8KICAgIGJ1cnkgMQoKc3dhcEZyb21WVXNkX2FmdGVyX2lmX2Vsc2VANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMxOQogICAgLy8gcmVzdWx0IC09IGZlZTsKICAgIGR1cDIKICAgIGR1cAogICAgY292ZXIgMgogICAgLQogICAgZHVwCiAgICBidXJ5IDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzIxCiAgICAvLyB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSA9IG5ld0Ftb3VudDsKICAgIGRpZyAxMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMgogICAgLy8gYXNzZXJ0KHJlc3VsdCA+PSByZWNlaXZlQW1vdW50TWluLCAnUG9vbDogc2xpcHBhZ2UnKTsKICAgIGR1cAogICAgZGlnIDcKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogc2xpcHBhZ2UKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIGl0eG5fYmVnaW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyNAogICAgLy8geGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzI0CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZGlnIDkKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMyMy0zMjcKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHJlc3VsdCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdXNlci5uYXRpdmUsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMjgKICAgIC8vIHRoaXMuYWRkUmV3YXJkcyhmZWUpOwogICAgY2FsbHN1YiBhZGRSZXdhcmRzCgpzd2FwRnJvbVZVc2RfYWZ0ZXJfaWZfZWxzZUA4OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzMwCiAgICAvLyBlbWl0PFN3YXBwZWRGcm9tVlVzZD4oeyByZWNpcGllbnQ6IHVzZXIsIHRva2VuSWQ6IHRoaXMuYXNzZXQudmFsdWUuaWQsIHZVc2RBbW91bnQ6IGFtb3VudCwgYW1vdW50OiByZXN1bHQsIGZlZSB9KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjcKICAgIC8vIGFzc2V0ID0gR2xvYmFsU3RhdGU8QXNzZXQ+KCk7CiAgICBieXRlY18yIC8vICJhc3NldCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjMzMAogICAgLy8gZW1pdDxTd2FwcGVkRnJvbVZVc2Q+KHsgcmVjaXBpZW50OiB1c2VyLCB0b2tlbklkOiB0aGlzLmFzc2V0LnZhbHVlLmlkLCB2VXNkQW1vdW50OiBhbW91bnQsIGFtb3VudDogcmVzdWx0LCBmZWUgfSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgZGlnIDcKICAgIHN3YXAKICAgIGNvbmNhdAogICAgZGlnIDYKICAgIGl0b2IKICAgIGNvbmNhdAogICAgZGlnIDIKICAgIGl0b2IKICAgIHN3YXAKICAgIGRpZyAxCiAgICBjb25jYXQKICAgIGRpZyAyCiAgICBpdG9iCiAgICBjb25jYXQKICAgIHB1c2hieXRlcyAweGQzZjFkNTQyIC8vIG1ldGhvZCAiU3dhcHBlZEZyb21WVXNkKGFkZHJlc3MsdWludDY0LHVpbnQ2NCx1aW50NjQsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzIKICAgIC8vIHRoaXMudmFsaWRhdGVCYWxhbmNlUmF0aW8oKTsKICAgIGNhbGxzdWIgdmFsaWRhdGVCYWxhbmNlUmF0aW8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjI5MS0yOTYKICAgIC8vIHN3YXBGcm9tVlVzZCgKICAgIC8vICAgdXNlcjogQWRkcmVzcywKICAgIC8vICAgYW1vdW50OiB1aW50NjQsCiAgICAvLyAgIHJlY2VpdmVBbW91bnRNaW46IHVpbnQ2NCwKICAgIC8vICAgemVyb0ZlZTogYm9vbGVhbiwKICAgIC8vICk6IHVpbnQ2NCB7CiAgICBieXRlYyAyNCAvLyAweDE1MWY3Yzc1CiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnNldEZlZVNoYXJlW3JvdXRpbmddKCkgLT4gdm9pZDoKc2V0RmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MQogICAgLy8gYXNzZXJ0KGZlZVNoYXJlQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQKICAgIC8vIGZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyAxNSAvLyAiZmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0MgogICAgLy8gdGhpcy5mZWVTaGFyZUJQLnZhbHVlID0gZmVlU2hhcmVCUDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozMzkKICAgIC8vIHNldEZlZVNoYXJlKGZlZVNoYXJlQlA6IHVpbnQ2NCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLmFkanVzdFRvdGFsTHBBbW91bnRbcm91dGluZ10oKSAtPiB2b2lkOgphZGp1c3RUb3RhbExwQW1vdW50OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NwogICAgLy8gY29uc3QgZCA9IHRoaXMuZC52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ3CiAgICAvLyBjb25zdCBkID0gdGhpcy5kLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNDgKICAgIC8vIGNvbnN0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzQ4CiAgICAvLyBjb25zdCB0b3RhbFN1cHBseSA9IHRoaXMudG90YWxTdXBwbHkudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICBjb3ZlciAyCiAgICBjb3ZlciAzCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTAKICAgIC8vIGlmIChkID4gdG90YWxTdXBwbHkpIHsKICAgID4KICAgIGJ6IGFkanVzdFRvdGFsTHBBbW91bnRfYWZ0ZXJfaWZfZWxzZUAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTEKICAgIC8vIHRoaXMuZGVwb3NpdExwKFR4bi5zZW5kZXIsIGQgLSB0b3RhbFN1cHBseSk7CiAgICB0eG4gU2VuZGVyCiAgICBkaWcgMgogICAgZGlnIDIKICAgIC0KICAgIGNhbGxzdWIgZGVwb3NpdExwCgphZGp1c3RUb3RhbExwQW1vdW50X2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM0NQogICAgLy8gYWRqdXN0VG90YWxMcEFtb3VudCgpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRCYWxhbmNlUmF0aW9NaW5CUFtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEJhbGFuY2VSYXRpb01pbkJQOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18yIC8vIDgKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQudWludDY0CiAgICBidG9pCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNTkKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYwCiAgICAvLyBhc3NlcnQoYmFsYW5jZVJhdGlvTWluQlAgPD0gQlAsICdQb29sOiB0b28gbGFyZ2UnKTsKICAgIGR1cAogICAgaW50YyA0IC8vIDEwMDAwCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHRvbyBsYXJnZQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzYxCiAgICAvLyB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlID0gYmFsYW5jZVJhdGlvTWluQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzU4CiAgICAvLyBzZXRCYWxhbmNlUmF0aW9NaW5CUChiYWxhbmNlUmF0aW9NaW5CUDogdWludDY0KTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RvcERlcG9zaXRbcm91dGluZ10oKSAtPiB2b2lkOgpzdG9wRGVwb3NpdDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTcKICAgIC8vIGNhbkRlcG9zaXQgPSBHbG9iYWxTdGF0ZTxib29sZWFuPih7IGluaXRpYWxWYWx1ZTogdHJ1ZSB9KTsvLyBpcyBkZXBvc2l0IG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMiAvLyAiY2FuRGVwb3NpdCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NgogICAgLy8gdGhpcy5jYW5EZXBvc2l0LnZhbHVlID0gZmFsc2U7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2NAogICAgLy8gc3RvcERlcG9zaXQoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnREZXBvc2l0W3JvdXRpbmddKCkgLT4gdm9pZDoKc3RhcnREZXBvc2l0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzcwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU3CiAgICAvLyBjYW5EZXBvc2l0ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgZGVwb3NpdCBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTIgLy8gImNhbkRlcG9zaXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzEKICAgIC8vIHRoaXMuY2FuRGVwb3NpdC52YWx1ZSA9IHRydWU7CiAgICBpbnRjXzEgLy8gMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM2OQogICAgLy8gc3RhcnREZXBvc2l0KCk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnN0b3BXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0b3BXaXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM3NQogICAgLy8gdGhpcy5vbmx5U3RvcEF1dGhvcml0eSgpOwogICAgY2FsbHN1YiBvbmx5U3RvcEF1dGhvcml0eQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzYKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzc0CiAgICAvLyBzdG9wV2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3RhcnRXaXRoZHJhd1tyb3V0aW5nXSgpIC0+IHZvaWQ6CnN0YXJ0V2l0aGRyYXc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODAKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTgKICAgIC8vIGNhbldpdGhkcmF3ID0gR2xvYmFsU3RhdGU8Ym9vbGVhbj4oeyBpbml0aWFsVmFsdWU6IHRydWUgfSk7Ly8gaXMgd2l0aGRyYXduIG9wZXJhdGlvbiBhbGxvd2VkCiAgICBieXRlYyAxMyAvLyAiY2FuV2l0aGRyYXciCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODEKICAgIC8vIHRoaXMuY2FuV2l0aGRyYXcudmFsdWUgPSB0cnVlOwogICAgaW50Y18xIC8vIDEKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozNzkKICAgIC8vIHN0YXJ0V2l0aGRyYXcoKTogdm9pZCB7CiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc2V0U3RvcEF1dGhvcml0eVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldFN0b3BBdXRob3JpdHk6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODQKICAgIC8vIHNldFN0b3BBdXRob3JpdHkoc3RvcEF1dGhvcml0eTogQWRkcmVzcyk6IHZvaWQgewogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMyAvLyAzMgogICAgPT0KICAgIGFzc2VydCAvLyBpbnZhbGlkIG51bWJlciBvZiBieXRlcyBmb3IgYXJjNC5zdGF0aWNfYXJyYXk8YXJjNC51aW50OCwgMzI+CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODUKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODYKICAgIC8vIHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZSA9IHN0b3BBdXRob3JpdHk7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzg0CiAgICAvLyBzZXRTdG9wQXV0aG9yaXR5KHN0b3BBdXRob3JpdHk6IEFkZHJlc3MpOiB2b2lkIHsKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5zZXRSb3V0ZXJbcm91dGluZ10oKSAtPiB2b2lkOgpzZXRSb3V0ZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozODkKICAgIC8vIHNldFJvdXRlcihyb3V0ZXI6IEFkZHJlc3MpOiB2b2lkIHsKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MzkwCiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czozOTEKICAgIC8vIHRoaXMucm91dGVyLnZhbHVlID0gcm91dGVyOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjM4OQogICAgLy8gc2V0Um91dGVyKHJvdXRlcjogQWRkcmVzcyk6IHZvaWQgewogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5jbGFpbVJld2FyZHNbcm91dGluZ10oKSAtPiB2b2lkOgpjbGFpbVJld2FyZHM6CiAgICBwdXNoYnl0ZXMgIiIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYxCiAgICAvLyBjb25zdCB1c2VyID0gVHhuLnNlbmRlcjsKICAgIHR4biBTZW5kZXIKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjYyCiAgICAvLyBjb25zdCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjMKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjQKICAgIC8vIGNvbnN0IHJld2FyZHMgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oQmlnVWludCh1c2VyTHBBbW91bnQpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgLyBQX1NDQUxFKTsKICAgIGR1cAogICAgaXRvYgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY0CiAgICAvLyBjb25zdCByZXdhcmRzID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlIC8gUF9TQ0FMRSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBkdXAKICAgIGJ1cnkgNAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY1CiAgICAvLyBjb25zdCBwZW5kaW5nOiB1aW50NjQgPSByZXdhcmRzIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGRpZyAyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NjUKICAgIC8vIGNvbnN0IHBlbmRpbmc6IHVpbnQ2NCA9IHJld2FyZHMgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICAtCiAgICBkdXAKICAgIGJ1cnkgNQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY2CiAgICAvLyBpZiAocGVuZGluZyA+IDApIHsKICAgIGJ6IGNsYWltUmV3YXJkc19hZnRlcl9pZl9lbHNlQDYKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgMQogICAgZHVwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzQKICAgIC8vIHVzZXJSZXdhcmREZWJ0ID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlYyA1IC8vICJ1c2VyUmV3YXJkRGVidCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo2NwogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZSA9IHJld2FyZHM7CiAgICBkaWcgNQogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY4CiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB1c2VyIH0pLnN1Ym1pdCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyA1CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjY5CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHVzZXIpLCBwZW5kaW5nIH0pOwogICAgaXRvYgogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpjbGFpbVJld2FyZHNfYWZ0ZXJfaWZfZWxzZUA2OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjU5CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuc2V0QWRtaW5GZWVTaGFyZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CnNldEFkbWluRmVlU2hhcmU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NzQKICAgIC8vIEBhYmltZXRob2QoKQogICAgdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnVpbnQ2NAogICAgYnRvaQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc2CiAgICAvLyB0aGlzLm9ubHlPd25lcigpOwogICAgY2FsbHN1YiBvbmx5T3duZXIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3NwogICAgLy8gYXNzZXJ0KGFkbWluRmVlU2hhcmVCUCA8PSBCUCwgJ1Jld2FyZE1hbmFnZXI6IHRvbyBoaWdoJyk7CiAgICBkdXAKICAgIGludGMgNCAvLyAxMDAwMAogICAgPD0KICAgIGFzc2VydCAvLyBSZXdhcmRNYW5hZ2VyOiB0b28gaGlnaAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI4CiAgICAvLyBhZG1pbkZlZVNoYXJlQlAgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiBCUCAvIDUgfSk7IC8vIERlZmF1bHQgYWRtaW4gZmVlIGlzIDIwJQogICAgYnl0ZWMgMTggLy8gImFkbWluRmVlU2hhcmVCUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo3OAogICAgLy8gdGhpcy5hZG1pbkZlZVNoYXJlQlAudmFsdWUgPSBhZG1pbkZlZVNoYXJlQlA7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjc0CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIGludGNfMSAvLyAxCiAgICByZXR1cm4KCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIuY2xhaW1BZG1pbkZlZVtyb3V0aW5nXSgpIC0+IHZvaWQ6CmNsYWltQWRtaW5GZWU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODMKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg0CiAgICAvLyBjb25zdCBhZG1pbkZlZUFtb3VudCA9IHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODQKICAgIC8vIGNvbnN0IGFkbWluRmVlQW1vdW50ID0gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg1CiAgICAvLyBpZiAoYWRtaW5GZWVBbW91bnQgPiAwKSB7CiAgICBieiBjbGFpbUFkbWluRmVlX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg3CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODcKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODkKICAgIC8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo4OQogICAgLy8gYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGRpZyAxCiAgICBpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CiAgICBpdHhuX2ZpZWxkIFhmZXJBc3NldAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjg2LTkwCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoewogICAgLy8gICB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICAvLyAgIGFzc2V0QW1vdW50OiBhZG1pbkZlZUFtb3VudCwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogdGhpcy5vd25lci52YWx1ZS5ieXRlcywKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgcHVzaGludCA0IC8vIDQKICAgIGl0eG5fZmllbGQgVHlwZUVudW0KICAgIGludGNfMCAvLyAwCiAgICBpdHhuX2ZpZWxkIEZlZQogICAgaXR4bl9zdWJtaXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjkxCiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlID0gMDsKICAgIGludGNfMCAvLyAwCiAgICBhcHBfZ2xvYmFsX3B1dAoKY2xhaW1BZG1pbkZlZV9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6ODEKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5wZW5kaW5nUmV3YXJkW3JvdXRpbmddKCkgLT4gdm9pZDoKcGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NQogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICB0eG5hIEFwcGxpY2F0aW9uQXJncyAxCiAgICBkdXAKICAgIGxlbgogICAgaW50Y18zIC8vIDMyCiAgICA9PQogICAgYXNzZXJ0IC8vIGludmFsaWQgbnVtYmVyIG9mIGJ5dGVzIGZvciBhcmM0LnN0YXRpY19hcnJheTxhcmM0LnVpbnQ4LCAzMj4KICAgIGNhbGxzdWIgc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLnBlbmRpbmdSZXdhcmQKICAgIGl0b2IKICAgIGJ5dGVjIDI0IC8vIDB4MTUxZjdjNzUKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICBpbnRjXzEgLy8gMQogICAgcmV0dXJuCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6Ok93bmFibGUudHJhbnNmZXJPd25lcnNoaXBbcm91dGluZ10oKSAtPiB2b2lkOgp0cmFuc2Zlck93bmVyc2hpcDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE2CiAgICAvLyBAYWJpbWV0aG9kKCkKICAgIHR4bmEgQXBwbGljYXRpb25BcmdzIDEKICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzMgLy8gMzIKICAgID09CiAgICBhc3NlcnQgLy8gaW52YWxpZCBudW1iZXIgb2YgYnl0ZXMgZm9yIGFyYzQuc3RhdGljX2FycmF5PGFyYzQudWludDgsIDMyPgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTgKICAgIC8vIHRoaXMub25seU93bmVyKCk7CiAgICBjYWxsc3ViIG9ubHlPd25lcgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjE5CiAgICAvLyB0aGlzLm93bmVyLnZhbHVlID0gbmV3T3duZXI7CiAgICBzd2FwCiAgICBhcHBfZ2xvYmFsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6MTYKICAgIC8vIEBhYmltZXRob2QoKQogICAgaW50Y18xIC8vIDEKICAgIHJldHVybgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLm9ubHlSb3V0ZXIoKSAtPiB2b2lkOgpvbmx5Um91dGVyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTE4CiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5yb3V0ZXIudmFsdWUuYnl0ZXMsICdQb29sOiBvbmx5IHJvdXRlcicpOwogICAgdHhuIFNlbmRlcgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1CiAgICAvLyByb3V0ZXIgPSBHbG9iYWxTdGF0ZTxBZGRyZXNzPigpOy8vIGlzIGRlcG9zaXQgb3BlcmF0aW9uIGFsbG93ZWQKICAgIGJ5dGVjIDIwIC8vICJyb3V0ZXIiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMTgKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnJvdXRlci52YWx1ZS5ieXRlcywgJ1Bvb2w6IG9ubHkgcm91dGVyJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgPT0KICAgIGFzc2VydCAvLyBQb29sOiBvbmx5IHJvdXRlcgogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wub25seVN0b3BBdXRob3JpdHkoKSAtPiB2b2lkOgpvbmx5U3RvcEF1dGhvcml0eToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyMgogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMuc3RvcEF1dGhvcml0eS52YWx1ZS5ieXRlcywgJ1Bvb2w6IGlzIG5vdCBzdG9wQXV0aG9yaXR5Jyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTYKICAgIC8vIHByaXZhdGUgc3RvcEF1dGhvcml0eSA9IEdsb2JhbFN0YXRlPEFkZHJlc3M+KCk7Ly8gY2FuIHJlc3RyaWN0IGRlcG9zaXQgb3Igd2l0aGRyYXcgb3BlcmF0aW9ucwogICAgYnl0ZWMgMjEgLy8gInN0b3BBdXRob3JpdHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjIKICAgIC8vIGFzc2VydChvcC5UeG4uc2VuZGVyLmJ5dGVzID09PSB0aGlzLnN0b3BBdXRob3JpdHkudmFsdWUuYnl0ZXMsICdQb29sOiBpcyBub3Qgc3RvcEF1dGhvcml0eScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID09CiAgICBhc3NlcnQgLy8gUG9vbDogaXMgbm90IHN0b3BBdXRob3JpdHkKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnZhbGlkYXRlQmFsYW5jZVJhdGlvKCkgLT4gdm9pZDoKdmFsaWRhdGVCYWxhbmNlUmF0aW86CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjgKICAgIC8vIHByaXZhdGUgdmFsaWRhdGVCYWxhbmNlUmF0aW8oKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEyOQogICAgLy8gY29uc3QgdG9rZW5CYWxhbmNlID0gdGhpcy50b2tlbkJhbGFuY2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMjkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoxMzAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMQogICAgLy8gaWYgKHRva2VuQmFsYW5jZSA+IHZVc2RCYWxhbmNlKSB7CiAgICA+CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTMyCiAgICAvLyBhc3NlcnQoKHZVc2RCYWxhbmNlICogQlApIC8gdG9rZW5CYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdlVTRCBiYWxhbmNlJyk7CiAgICBmcmFtZV9kaWcgMQogICAgaW50YyA0IC8vIDEwMDAwCiAgICAqCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4CiAgICAvLyBiYWxhbmNlUmF0aW9NaW5CUCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE2IC8vICJiYWxhbmNlUmF0aW9NaW5CUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMgogICAgLy8gYXNzZXJ0KCh2VXNkQmFsYW5jZSAqIEJQKSAvIHRva2VuQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHZVU0QgYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHZVU0QgYmFsYW5jZQoKdmFsaWRhdGVCYWxhbmNlUmF0aW9fYWZ0ZXJfaWZfZWxzZUA1OgogICAgcmV0c3ViCgp2YWxpZGF0ZUJhbGFuY2VSYXRpb19lbHNlX2JvZHlAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzMwogICAgLy8gfSBlbHNlIGlmICh0b2tlbkJhbGFuY2UgPCB2VXNkQmFsYW5jZSkgewogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2RpZyAxCiAgICA8CiAgICBieiB2YWxpZGF0ZUJhbGFuY2VSYXRpb19hZnRlcl9pZl9lbHNlQDUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjEzNAogICAgLy8gYXNzZXJ0KCh0b2tlbkJhbGFuY2UgKiBCUCkgLyB2VXNkQmFsYW5jZSA+PSB0aGlzLmJhbGFuY2VSYXRpb01pbkJQLnZhbHVlLCAnUG9vbDogbG93IHRva2VuIGJhbGFuY2UnKTsKICAgIGZyYW1lX2RpZyAwCiAgICBpbnRjIDQgLy8gMTAwMDAKICAgICoKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgKICAgIC8vIGJhbGFuY2VSYXRpb01pbkJQID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTYgLy8gImJhbGFuY2VSYXRpb01pbkJQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTM0CiAgICAvLyBhc3NlcnQoKHRva2VuQmFsYW5jZSAqIEJQKSAvIHZVc2RCYWxhbmNlID49IHRoaXMuYmFsYW5jZVJhdGlvTWluQlAudmFsdWUsICdQb29sOiBsb3cgdG9rZW4gYmFsYW5jZScpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgID49CiAgICBhc3NlcnQgLy8gUG9vbDogbG93IHRva2VuIGJhbGFuY2UKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhdzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5Ny0xOTgKICAgIC8vIEBhYmltZXRob2QoeyBkZWZhdWx0QXJndW1lbnRzOiB7IGJ1ZGdldDogeyBjb25zdGFudDogMzAwMCB9IH0gfSkKICAgIC8vIHdpdGhkcmF3KGFtb3VudExwOiB1aW50NjQsIGJ1ZGdldDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE5OQogICAgLy8gZW5zdXJlQnVkZ2V0KGJ1ZGdldCwgT3BVcEZlZVNvdXJjZS5Hcm91cENyZWRpdCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICBjYWxsc3ViIGVuc3VyZV9idWRnZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjE0MwogICAgLy8gYXNzZXJ0KHRoaXMuY2FuV2l0aGRyYXcudmFsdWUsICciUG9vbDogd2l0aGRyYXcgcHJvaGliaXRlZCcpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjU4CiAgICAvLyBjYW5XaXRoZHJhdyA9IEdsb2JhbFN0YXRlPGJvb2xlYW4+KHsgaW5pdGlhbFZhbHVlOiB0cnVlIH0pOy8vIGlzIHdpdGhkcmF3biBvcGVyYXRpb24gYWxsb3dlZAogICAgYnl0ZWMgMTMgLy8gImNhbldpdGhkcmF3IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MTQzCiAgICAvLyBhc3NlcnQodGhpcy5jYW5XaXRoZHJhdy52YWx1ZSwgJyJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgYXNzZXJ0IC8vICJQb29sOiB3aXRoZHJhdyBwcm9oaWJpdGVkCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDMKICAgIC8vIGNvbnN0IG9sZEQgPSB0aGlzLmQudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEKICAgIC8vIGQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNiAvLyAiZCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIwMwogICAgLy8gY29uc3Qgb2xkRCA9IHRoaXMuZC52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDQKICAgIC8vIHRoaXMud2l0aGRyYXdMcChUeG4uc2VuZGVyLCBhbW91bnRMcCk7CiAgICB0eG4gU2VuZGVyCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzAKICAgIC8vIGxldCB1c2VyTHBBbW91bnQgPSB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMAogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZShmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzEKICAgIC8vIGFzc2VydCh1c2VyTHBBbW91bnQgPj0gbHBBbW91bnQsICdSZXdhcmRNYW5hZ2VyOiBub3QgZW5vdWdoIGFtb3VudCcpOwogICAgZHVwCiAgICBmcmFtZV9kaWcgLTIKICAgID49CiAgICBhc3NlcnQgLy8gUmV3YXJkTWFuYWdlcjogbm90IGVub3VnaCBhbW91bnQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzIKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMgogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzMwogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgc3dhcAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNAogICAgLy8gaWYgKHVzZXJMcEFtb3VudCA+IDApIHsKICAgIGJ6IHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLndpdGhkcmF3X2FmdGVyX2lmX2Vsc2VANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAyCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMwogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzNQogICAgLy8gcGVuZGluZyA9IGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh1c2VyTHBBbW91bnQpICogYWNjUmV3YXJkUGVyU2hhcmVQKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidChmcm9tKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBMb2NhbFN0YXRlIGV4aXN0cwogICAgLQogICAgZnJhbWVfYnVyeSA0CgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC53aXRoZHJhd19hZnRlcl9pZl9lbHNlQDY6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM3CiAgICAvLyB1c2VyTHBBbW91bnQgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOAogICAgLy8gdGhpcy5iYWxhbmNlKGZyb20pLnZhbHVlIC09IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIGRpZyAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTM4CiAgICAvLyB0aGlzLmJhbGFuY2UoZnJvbSkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICB1bmNvdmVyIDIKICAgIGFwcF9sb2NhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI5CiAgICAvLyB0b3RhbFN1cHBseSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA3IC8vICJ0b3RhbFN1cHBseSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMzkKICAgIC8vIHRoaXMudG90YWxTdXBwbHkudmFsdWUgLT0gbHBBbW91bnQ7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIC0yCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEzOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSAtPSBscEFtb3VudDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgaXRvYgogICAgZnJhbWVfZGlnIDMKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQwCiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KGZyb20pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpOwogICAgc3dhcAogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MQogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgNAogICAgYnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTQyCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiBmcm9tIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyNwogICAgLy8gYXNzZXQgPSBHbG9iYWxTdGF0ZTxBc3NldD4oKTsKICAgIGJ5dGVjXzIgLy8gImFzc2V0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogZnJvbSB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBjb3ZlciAyCiAgICBpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKICAgIGZyYW1lX2RpZyA0CiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGl0eG5fZmllbGQgQXNzZXRBbW91bnQKICAgIGl0eG5fZmllbGQgWGZlckFzc2V0CiAgICBwdXNoaW50IDQgLy8gNAogICAgaXR4bl9maWVsZCBUeXBlRW51bQogICAgaW50Y18wIC8vIDAKICAgIGl0eG5fZmllbGQgRmVlCiAgICBpdHhuX3N1Ym1pdAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0MwogICAgLy8gZW1pdDxSZXdhcmRzQ2xhaW1lZD4oeyB1c2VyOiBuZXcgQWRkcmVzcyhmcm9tKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGNvbmNhdAogICAgYnl0ZWMgMjUgLy8gbWV0aG9kICJSZXdhcmRzQ2xhaW1lZChhZGRyZXNzLHVpbnQ2NCkiCiAgICBzd2FwCiAgICBjb25jYXQKICAgIGxvZwoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wud2l0aGRyYXdfYWZ0ZXJfaWZfZWxzZUA5OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjE0NQogICAgLy8gZW1pdDxXaXRoZHJhdz4oeyBmcm9tOiBuZXcgQWRkcmVzcyhmcm9tKSwgbHBBbW91bnQgfSk7CiAgICBmcmFtZV9kaWcgLTIKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAxCiAgICBkaWcgMQogICAgY29uY2F0CiAgICBwdXNoYnl0ZXMgMHhkM2FmYTRmMSAvLyBtZXRob2QgIldpdGhkcmF3KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMDkKICAgIC8vIGNvbnN0IHRva2VuQmFsYW5jZSA9IHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjA5CiAgICAvLyBjb25zdCB0b2tlbkJhbGFuY2UgPSB0aGlzLnRva2VuQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTAKICAgIC8vIGNvbnN0IHZVc2RCYWxhbmNlID0gdGhpcy52VXNkQmFsYW5jZS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTIKICAgIC8vIGNvbnN0IG9sZEJhbGFuY2U6IHVpbnQ2NCA9ICh0b2tlbkJhbGFuY2UgKyB2VXNkQmFsYW5jZSk7CiAgICBkdXAyCiAgICArCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIGRpZyAyCiAgICBpdG9iCiAgICBkaWcgNAogICAgYioKICAgIGRpZyAxCiAgICBpdG9iCiAgICBzd2FwCiAgICBkaWcgMQogICAgYi8KICAgIGR1cAogICAgbGVuCiAgICBpbnRjXzIgLy8gOAogICAgPD0KICAgIGFzc2VydCAvLyBvdmVyZmxvdwogICAgaW50Y18yIC8vIDgKICAgIGJ6ZXJvCiAgICBzd2FwCiAgICBkaWcgMQogICAgYnwKICAgIGJ0b2kKICAgIHVuY292ZXIgNQogICAgc3dhcAogICAgLQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDYKICAgIC8vIHRva2VuQmFsYW5jZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlY18wIC8vICJ0b2tlbkJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTMKICAgIC8vIHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHRva2VuQmFsYW5jZSkpIC8gQmlnVWludChvbGRCYWxhbmNlKSkuYXNVaW50NjQoKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDcKICAgIC8vIHZVc2RCYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzEgLy8gInZVc2RCYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjE0CiAgICAvLyB0aGlzLnZVc2RCYWxhbmNlLnZhbHVlIC09IG5ldyBVaW50PDY0PigoQmlnVWludChhbW91bnRMcCkgKiBCaWdVaW50KHZVc2RCYWxhbmNlKSkgLyBCaWdVaW50KG9sZEJhbGFuY2UpKS5hc1VpbnQ2NCgpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHVuY292ZXIgNAogICAgaXRvYgogICAgdW5jb3ZlciA1CiAgICBiKgogICAgdW5jb3ZlciAzCiAgICBiLwogICAgZHVwCiAgICBsZW4KICAgIGludGNfMiAvLyA4CiAgICA8PQogICAgYXNzZXJ0IC8vIG92ZXJmbG93CiAgICB1bmNvdmVyIDIKICAgIGJ8CiAgICBidG9pCiAgICAtCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTQKICAgIC8vIHRoaXMudlVzZEJhbGFuY2UudmFsdWUgLT0gbmV3IFVpbnQ8NjQ+KChCaWdVaW50KGFtb3VudExwKSAqIEJpZ1VpbnQodlVzZEJhbGFuY2UpKSAvIEJpZ1VpbnQob2xkQmFsYW5jZSkpLmFzVWludDY0KCk7CiAgICBkaWcgMQogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NgogICAgLy8gdG9rZW5CYWxhbmNlID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjXzAgLy8gInRva2VuQmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIxNgogICAgLy8gYXNzZXJ0KHRoaXMudG9rZW5CYWxhbmNlLnZhbHVlICsgdGhpcy52VXNkQmFsYW5jZS52YWx1ZSA8IG9sZEJhbGFuY2UsICdQb29sOiB6ZXJvIGNoYW5nZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICArCiAgICA+CiAgICBhc3NlcnQgLy8gUG9vbDogemVybyBjaGFuZ2VzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OQogICAgLy8gcmVzZXJ2ZXMgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNCAvLyAicmVzZXJ2ZXMiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMTkKICAgIC8vIGFzc2VydChhbW91bnRMcCA8PSB0aGlzLnJlc2VydmVzLnZhbHVlLCAnUG9vbDogcmVzZXJ2ZXMnKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGRpZyAxCiAgICA8PQogICAgYXNzZXJ0IC8vIFBvb2w6IHJlc2VydmVzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjIKICAgIC8vIHRoaXMucmVzZXJ2ZXMudmFsdWUgLT0gYW1vdW50THA7CiAgICBmcmFtZV9kaWcgLTIKICAgIC0KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5CiAgICAvLyByZXNlcnZlcyA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA0IC8vICJyZXNlcnZlcyIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyMgogICAgLy8gdGhpcy5yZXNlcnZlcy52YWx1ZSAtPSBhbW91bnRMcDsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjUKICAgIC8vIHRoaXMudXBkYXRlRCgpOwogICAgY2FsbHN1YiB1cGRhdGVECiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjYKICAgIC8vIGFzc2VydCh0aGlzLmQudmFsdWUgPCBvbGRELCAnUG9vbDogemVybyBEIGNoYW5nZXMnKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI2CiAgICAvLyBhc3NlcnQodGhpcy5kLnZhbHVlIDwgb2xkRCwgJ1Bvb2w6IHplcm8gRCBjaGFuZ2VzJyk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgZnJhbWVfZGlnIDAKICAgIDwKICAgIGFzc2VydCAvLyBQb29sOiB6ZXJvIEQgY2hhbmdlcwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI4LTIzMgogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsKICAgIC8vICAgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLAogICAgLy8gICBhc3NldEFtb3VudDogdGhpcy5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudExwKSwKICAgIC8vICAgYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIC8vIH0pLnN1Ym1pdCgpOwogICAgaXR4bl9iZWdpbgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6MjI5CiAgICAvLyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMjkKICAgIC8vIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czoyMzAKICAgIC8vIGFzc2V0QW1vdW50OiB0aGlzLmZyb21TeXN0ZW1QcmVjaXNpb24oYW1vdW50THApLAogICAgZnJhbWVfZGlnIC0yCiAgICBjYWxsc3ViIGZyb21TeXN0ZW1QcmVjaXNpb24KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIzMQogICAgLy8gYXNzZXRSZWNlaXZlcjogVHhuLnNlbmRlciwKICAgIHR4biBTZW5kZXIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjIyOC0yMzIKICAgIC8vIGl0eG4uYXNzZXRUcmFuc2Zlcih7CiAgICAvLyAgIHhmZXJBc3NldDogdGhpcy5hc3NldC52YWx1ZSwKICAgIC8vICAgYXNzZXRBbW91bnQ6IHRoaXMuZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnRMcCksCiAgICAvLyAgIGFzc2V0UmVjZWl2ZXI6IFR4bi5zZW5kZXIsCiAgICAvLyB9KS5zdWJtaXQoKTsKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5nZXRZKHg6IHVpbnQ2NCkgLT4gdWludDY0OgpnZXRZOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk3CiAgICAvLyBwcml2YXRlIGdldFkoeDogdWludDY0KTogdWludDY0IHsKICAgIHByb3RvIDEgMQogICAgaW50Y18wIC8vIDAKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk4CiAgICAvLyBjb25zdCB4XyA9IEJpZ1VpbnQoeCk7CiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGR1cAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MQogICAgLy8gZCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyA2IC8vICJkIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6Mzk5CiAgICAvLyBjb25zdCBkXyA9IEJpZ1VpbnQodGhpcy5kLnZhbHVlKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwMAogICAgLy8gY29uc3QgYTQgPSBCaWdVaW50KHRoaXMuYS52YWx1ZSA8PCAyKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MAogICAgLy8gYSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDE5IC8vICJhIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAwCiAgICAvLyBjb25zdCBhNCA9IEJpZ1VpbnQodGhpcy5hLnZhbHVlIDw8IDIpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzaGwKICAgIGl0b2IKICAgIGR1cAogICAgY292ZXIgMwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAxCiAgICAvLyBjb25zdCBhOCA9IEJpZ1VpbnQoYTQgKiAybik7CiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiKgogICAgY292ZXIgMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDAzCiAgICAvLyBjb25zdCBkTWludXNYSXNQb3NpdGl2ZSA9IGRfID49IHhfOwogICAgYjw9CiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgYnogZ2V0WV90ZXJuYXJ5X2ZhbHNlQDIKICAgIGZyYW1lX2RpZyAzCiAgICBmcmFtZV9kaWcgMgogICAgYi0KCmdldFlfdGVybmFyeV9tZXJnZUAzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDA2CiAgICAvLyBjb25zdCBhNEJ5RE1pbnVzWEFiczogYmlndWludCA9IGE0ICogZE1pbnVzWEFiczsKICAgIGZyYW1lX2RpZyA0CiAgICBiKgogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTEKICAgIC8vIGlmIChkTWludXNYSXNQb3NpdGl2ZSkgewogICAgZnJhbWVfZGlnIDYKICAgIGJ6IGdldFlfZWxzZV9ib2R5QDgKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxMgogICAgLy8gaWYgKGE0QnlETWludXNYQWJzID49IGRfKSB7CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGI+PQogICAgYnogZ2V0WV9lbHNlX2JvZHlANgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDEzCiAgICAvLyBwYXJ0MUFicyA9IGE0QnlETWludXNYQWJzIC0gZF87CiAgICBmcmFtZV9kaWcgMAogICAgZnJhbWVfZGlnIDMKICAgIGItCiAgICBmcmFtZV9idXJ5IDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNAogICAgLy8gcGFydDFJc1Bvc2l0aXZlID0gdHJ1ZTsKICAgIGludGNfMSAvLyAxCgpnZXRZX2FmdGVyX2lmX2Vsc2VAOToKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNQogICAgLy8gY29uc3QgcGFydDI6IGJpZ3VpbnQgPSBCaWdVaW50KHgpICogKGE0ICogZF8gKiBkXyAqIGRfICsgeF8gKiAocGFydDFBYnMgKiBwYXJ0MUFicykpOwogICAgZnJhbWVfZGlnIDQKICAgIGZyYW1lX2RpZyAzCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIqCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBiKgogICAgZnJhbWVfZGlnIDIKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKwogICAgYioKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyNgogICAgLy8gbGV0IG51bWVyYXRvcjogYmlndWludCA9IHRoaXMuc3FydChwYXJ0Mik7CiAgICBjYWxsc3ViIHNxcnQKICAgIHN3YXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQyOQogICAgLy8gaWYgKHBhcnQxSXNQb3NpdGl2ZSkgewogICAgYnogZ2V0WV9lbHNlX2JvZHlAMTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQzMAogICAgLy8gbnVtZXJhdG9yICs9IHhfICogcGFydDFBYnM7CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfZGlnIDEKICAgIGIqCiAgICBiKwoKZ2V0WV9hZnRlcl9pZl9lbHNlQDEyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM2CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKG51bWVyYXRvciAvIChhOCAqIHhfKSArIDFuKTsgLy8gKzEgdG8gb2Zmc2V0IHJvdW5kaW5nIGVycm9ycwogICAgZnJhbWVfZGlnIDUKICAgIGZyYW1lX2RpZyAyCiAgICBiKgogICAgYi8KICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGIrCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmdldFlfZWxzZV9ib2R5QDExOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDMyCiAgICAvLyBudW1lcmF0b3IgLT0geF8gKiBwYXJ0MUFiczsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgMQogICAgYioKICAgIGItCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUAxMgoKZ2V0WV9lbHNlX2JvZHlANjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQxNgogICAgLy8gcGFydDFBYnMgPSBkXyAtIGE0QnlETWludXNYQWJzOwogICAgZnJhbWVfZGlnIDMKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgZnJhbWVfYnVyeSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MTcKICAgIC8vIHBhcnQxSXNQb3NpdGl2ZSA9IGZhbHNlOwogICAgaW50Y18wIC8vIDAKICAgIGIgZ2V0WV9hZnRlcl9pZl9lbHNlQDkKCmdldFlfZWxzZV9ib2R5QDg6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0MjAKICAgIC8vIHBhcnQxQWJzID0gYTRCeURNaW51c1hBYnMgKyBkXzsKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9kaWcgMwogICAgYisKICAgIGZyYW1lX2J1cnkgMQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDIxCiAgICAvLyBwYXJ0MUlzUG9zaXRpdmUgPSBmYWxzZTsKICAgIGludGNfMCAvLyAwCiAgICBiIGdldFlfYWZ0ZXJfaWZfZWxzZUA5CgpnZXRZX3Rlcm5hcnlfZmFsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQwNAogICAgLy8gY29uc3QgZE1pbnVzWEFiczogYmlndWludCA9IGRNaW51c1hJc1Bvc2l0aXZlID8gKGRfIC0geF8pIDogKHhfIC0gZF8pOwogICAgZnJhbWVfZGlnIDIKICAgIGZyYW1lX2RpZyAzCiAgICBiLQogICAgYiBnZXRZX3Rlcm5hcnlfbWVyZ2VAMwoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjpQb29sLnVwZGF0ZUQoKSAtPiB2b2lkOgp1cGRhdGVEOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDM5CiAgICAvLyBwcml2YXRlIHVwZGF0ZUQoKTogdm9pZCB7CiAgICBwcm90byAwIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0MAogICAgLy8gY29uc3QgeCA9IEJpZ1VpbnQodGhpcy50b2tlbkJhbGFuY2UudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2CiAgICAvLyB0b2tlbkJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMCAvLyAidG9rZW5CYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQwCiAgICAvLyBjb25zdCB4ID0gQmlnVWludCh0aGlzLnRva2VuQmFsYW5jZS52YWx1ZSk7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDQxCiAgICAvLyBjb25zdCB5ID0gQmlnVWludCh0aGlzLnZVc2RCYWxhbmNlLnZhbHVlKTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NwogICAgLy8gdlVzZEJhbGFuY2UgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWNfMSAvLyAidlVzZEJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDEKICAgIC8vIGNvbnN0IHkgPSBCaWdVaW50KHRoaXMudlVzZEJhbGFuY2UudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0NgogICAgLy8gY29uc3QgeHk6IGJpZ3VpbnQgPSB4ICogeTsKICAgIGR1cDIKICAgIGIqCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwCiAgICAvLyBhID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMTkgLy8gImEiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NDcKICAgIC8vIGNvbnN0IGFfID0gQmlnVWludCh0aGlzLmEudmFsdWUpOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ0OQogICAgLy8gY29uc3QgcDE6IGJpZ3VpbnQgPSBhXyAqIHh5ICogKHggKyB5KTsKICAgIGR1cAogICAgZGlnIDIKICAgIGIqCiAgICB1bmNvdmVyIDQKICAgIHVuY292ZXIgNAogICAgYisKICAgIGIqCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MQogICAgLy8gY29uc3QgcDI6IGJpZ3VpbnQgPSAoeHkgKiAoKGFfICogNG4pIC0gMW4pKSAvIDNuOwogICAgcHVzaGJ5dGVzIDB4MDQKICAgIGIqCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiLQogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1MwogICAgLy8gY29uc3QgcDM6IGJpZ3VpbnQgPSB0aGlzLnNxcnQoKHAxICogcDEpICsgKHAyICogcDIgKiBwMikpOwogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgZGlnIDEKICAgIGRpZyAyCiAgICBiKgogICAgdW5jb3ZlciAyCiAgICBiKgogICAgYisKICAgIGNhbGxzdWIgc3FydAogICAgZHVwCiAgICBjb3ZlciAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTQKICAgIC8vIGxldCBkXyA9IHRoaXMuY2JydChwMSArIHAzKTsKICAgIGR1cDIKICAgIGIrCiAgICBjYWxsc3ViIGNicnQKICAgIGNvdmVyIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ1NQogICAgLy8gaWYgKHAzID4gcDEpIHsKICAgIGI8CiAgICBieiB1cGRhdGVEX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTYKICAgIC8vIGRfIC09IHRoaXMuY2JydChwMyAtIHAxKTsKICAgIGZyYW1lX2RpZyAwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgc3dhcAogICAgLQogICAgZnJhbWVfYnVyeSAxCgp1cGRhdGVEX2FmdGVyX2lmX2Vsc2VAMzoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2MAogICAgLy8gdGhpcy5kLnZhbHVlID0gKGRfIDw8IDEpOwogICAgZnJhbWVfZGlnIDEKICAgIGludGNfMSAvLyAxCiAgICBzaGwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxCiAgICAvLyBkID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDYgLy8gImQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjAKICAgIC8vIHRoaXMuZC52YWx1ZSA9IChkXyA8PCAxKTsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CiAgICByZXRzdWIKCnVwZGF0ZURfZWxzZV9ib2R5QDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NTgKICAgIC8vIGRfICs9IHRoaXMuY2JydChwMSAtIHAzKTsKICAgIGZyYW1lX2RpZyAwCiAgICBzd2FwCiAgICBiLQogICAgY2FsbHN1YiBjYnJ0CiAgICBmcmFtZV9kaWcgMQogICAgKwogICAgZnJhbWVfYnVyeSAxCiAgICBiIHVwZGF0ZURfYWZ0ZXJfaWZfZWxzZUAzCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wudG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpIC0+IHVpbnQ2NDoKdG9TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjMKICAgIC8vIHByaXZhdGUgdG9TeXN0ZW1QcmVjaXNpb24oYW1vdW50OiB1aW50NjQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjQKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50UmVkdWNlID0gdGhpcy50b2tlbkFtb3VudFJlZHVjZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MwogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudFJlZHVjZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIyIC8vICJ0b2tlbkFtb3VudFJlZHVjZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NAogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NjUKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTQKICAgIC8vIHByaXZhdGUgdG9rZW5BbW91bnRJbmNyZWFzZSA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDIzIC8vICJ0b2tlbkFtb3VudEluY3JlYXNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY1CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudEluY3JlYXNlID0gdGhpcy50b2tlbkFtb3VudEluY3JlYXNlLnZhbHVlOwogICAgYXBwX2dsb2JhbF9nZXRfZXgKICAgIHN3YXAKICAgIGNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2NwogICAgLy8gaWYgKHRva2VuQW1vdW50UmVkdWNlID4gMCkgewogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fZWxzZV9ib2R5QDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ2OAogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50UmVkdWNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMAogICAgLwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDY5CiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogdG9TeXN0ZW1QcmVjaXNpb25fYWZ0ZXJfaWZfZWxzZUA0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudEluY3JlYXNlOwogICAgZnJhbWVfZGlnIC0xCiAgICBmcmFtZV9kaWcgMQogICAgKgogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCnRvU3lzdGVtUHJlY2lzaW9uX2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3MgogICAgLy8gcmV0dXJuIGFtb3VudDsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo6UG9vbC5mcm9tU3lzdGVtUHJlY2lzaW9uKGFtb3VudDogdWludDY0KSAtPiB1aW50NjQ6CmZyb21TeXN0ZW1QcmVjaXNpb246CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzUKICAgIC8vIHByaXZhdGUgZnJvbVN5c3RlbVByZWNpc2lvbihhbW91bnQ6IHVpbnQ2NCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NgogICAgLy8gY29uc3QgdG9rZW5BbW91bnRSZWR1Y2UgPSB0aGlzLnRva2VuQW1vdW50UmVkdWNlLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzCiAgICAvLyBwcml2YXRlIHRva2VuQW1vdW50UmVkdWNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjIgLy8gInRva2VuQW1vdW50UmVkdWNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc2CiAgICAvLyBjb25zdCB0b2tlbkFtb3VudFJlZHVjZSA9IHRoaXMudG9rZW5BbW91bnRSZWR1Y2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgZHVwCiAgICB1bmNvdmVyIDIKICAgIGFzc2VydCAvLyBjaGVjayBHbG9iYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ3NwogICAgLy8gY29uc3QgdG9rZW5BbW91bnRJbmNyZWFzZSA9IHRoaXMudG9rZW5BbW91bnRJbmNyZWFzZS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1NAogICAgLy8gcHJpdmF0ZSB0b2tlbkFtb3VudEluY3JlYXNlID0gR2xvYmFsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgMjMgLy8gInRva2VuQW1vdW50SW5jcmVhc2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0NzcKICAgIC8vIGNvbnN0IHRva2VuQW1vdW50SW5jcmVhc2UgPSB0aGlzLnRva2VuQW1vdW50SW5jcmVhc2UudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgc3dhcAogICAgY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDc5CiAgICAvLyBpZiAodG9rZW5BbW91bnRSZWR1Y2UgPiAwKSB7CiAgICBieiBmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODAKICAgIC8vIHJldHVybiBhbW91bnQgKiB0b2tlbkFtb3VudFJlZHVjZTsKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDAKICAgICoKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpmcm9tU3lzdGVtUHJlY2lzaW9uX2Vsc2VfYm9keUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDgxCiAgICAvLyB9IGVsc2UgaWYgKHRva2VuQW1vdW50SW5jcmVhc2UgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4MgogICAgLy8gcmV0dXJuIGFtb3VudCAvIHRva2VuQW1vdW50SW5jcmVhc2U7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICAvCiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKZnJvbVN5c3RlbVByZWNpc2lvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODQKICAgIC8vIHJldHVybiBhbW91bnQ7CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuc3FydChuOiBieXRlcykgLT4gYnl0ZXM6CnNxcnQ6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0ODcKICAgIC8vIHByaXZhdGUgc3FydChuOiBiaWd1aW50KTogYmlndWludCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OAogICAgLy8gYXNzZXJ0KG4gPiAwbiwgJ24gbXVzdCBiZSBub24tbmVnYXRpdmUnKTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPgogICAgYXNzZXJ0IC8vIG4gbXVzdCBiZSBub24tbmVnYXRpdmUKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ4OQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMG47CiAgICBmcmFtZV9kaWcgLTEKICAgIHB1c2hieXRlcyAweAogICAgYj09CiAgICBieiBzcXJ0X2FmdGVyX2lmX2Vsc2VAMgogICAgcHVzaGJ5dGVzIDB4CiAgICBmcmFtZV9idXJ5IDAKICAgIHJldHN1YgoKc3FydF9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTAKICAgIC8vIGlmIChuIDw9IDNuKSByZXR1cm4gMW47CiAgICBmcmFtZV9kaWcgLTEKICAgIGJ5dGVjIDI2IC8vIDB4MDMKICAgIGI8PQogICAgYnogc3FydF9hZnRlcl9pZl9lbHNlQDQKICAgIGJ5dGVjIDEwIC8vIDB4MDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpzcXJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5MwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDEpIC8gMik7CiAgICBpbnRjXzEgLy8gMQogICAgKwogICAgcHVzaGludCAyIC8vIDIKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo0OTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjQ5NgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NDk3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMAogICAgLy8gbGV0IHk6IGJpZ3VpbnQgPSAoeCArIG4gLyB4KSAvIDJuOwogICAgZnJhbWVfZGlnIC0xCiAgICBkaWcgMQogICAgYi8KICAgIGIrCiAgICBieXRlYyAxNyAvLyAweDAyCiAgICBiLwogICAgZnJhbWVfYnVyeSAxCgpzcXJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTAxCiAgICAvLyB3aGlsZSAoeSA8IHgpIHsKICAgIGZyYW1lX2RpZyAxCiAgICBmcmFtZV9kaWcgMAogICAgYjwKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMS01MDQKICAgIC8vIHdoaWxlICh5IDwgeCkgewogICAgLy8gICB4ID0geTsKICAgIC8vICAgeSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICAvLyB9CiAgICBieiBzcXJ0X2FmdGVyX3doaWxlQDcKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwMwogICAgLy8geSA9ICh4ICsgbiAvIHgpIC8gMm47CiAgICBmcmFtZV9kaWcgLTEKICAgIGZyYW1lX2RpZyAxCiAgICBkdXAKICAgIGNvdmVyIDIKICAgIGIvCiAgICBkaWcgMQogICAgYisKICAgIGJ5dGVjIDE3IC8vIDB4MDIKICAgIGIvCiAgICBmcmFtZV9idXJ5IDEKICAgIGZyYW1lX2J1cnkgMAogICAgYiBzcXJ0X3doaWxlX3RvcEA1CgpzcXJ0X2FmdGVyX3doaWxlQDc6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MDUKICAgIC8vIHJldHVybiB4OwogICAgcmV0c3ViCgoKLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6OlBvb2wuY2JydChuOiBieXRlcykgLT4gdWludDY0OgpjYnJ0OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTA4CiAgICAvLyBwcml2YXRlIGNicnQobjogYmlndWludCk6IHVpbnQ2NCB7CiAgICBwcm90byAxIDEKICAgIGludGNfMCAvLyAwCiAgICBkdXBuIDMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUwOQogICAgLy8gaWYgKG4gPT09IDBuKSByZXR1cm4gMDsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4CiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAyCiAgICBpbnRjXzAgLy8gMAogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAyOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTEwCiAgICAvLyBpZiAobiA8IDhuKSByZXR1cm4gMTsKICAgIGZyYW1lX2RpZyAtMQogICAgcHVzaGJ5dGVzIDB4MDgKICAgIGI8CiAgICBieiBjYnJ0X2FmdGVyX2lmX2Vsc2VANAogICAgaW50Y18xIC8vIDEKICAgIGZyYW1lX2J1cnkgMAogICAgcmV0c3ViCgpjYnJ0X2FmdGVyX2lmX2Vsc2VANDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxMwogICAgLy8gY29uc3QgYmwgPSBiaXRMZW5ndGgoQnl0ZXMobikpOwogICAgZnJhbWVfZGlnIC0xCiAgICBiaXRsZW4KICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNAogICAgLy8gbGV0IHdpZGUgPSBleHB3KDIsIChibCArIDIpIC8gMyk7CiAgICBwdXNoaW50IDIgLy8gMgogICAgKwogICAgcHVzaGludCAzIC8vIDMKICAgIC8KICAgIHB1c2hpbnQgMiAvLyAyCiAgICBzd2FwCiAgICBleHB3CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MTUKICAgIC8vIGNvbnN0IGhpID0gQmlnVWludCh3aWRlWzBdKTsKICAgIHN3YXAKICAgIGl0b2IKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUxNgogICAgLy8gY29uc3QgbG8gPSBCaWdVaW50KHdpZGVbMV0pOwogICAgc3dhcAogICAgaXRvYgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTE3CiAgICAvLyBsZXQgeDogYmlndWludCA9IGhpICogU0hJRlQ2NCArIGxvOwogICAgc3dhcAogICAgYnl0ZWMgMjggLy8gMHgwMTAwMDAwMDAwMDAwMDAwMDAKICAgIGIqCiAgICBiKwogICAgZnJhbWVfYnVyeSAxCgpjYnJ0X3doaWxlX3RvcEA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9wb29sLmNvbnRyYWN0LmFsZ28udHM6NTIxCiAgICAvLyBjb25zdCB4MjogYmlndWludCA9IHggKiB4OwogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgYioKICAgIGR1cAogICAgZnJhbWVfYnVyeSAzCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjIKICAgIC8vIGlmICh4MiA9PT0gMG4pIGJyZWFrOyAvLyBzaG91bGQgbm90IGhhcHBlbiBmb3IgeD4wCiAgICBwdXNoYnl0ZXMgMHgKICAgIGI9PQogICAgYm56IGNicnRfd2hpbGVfdG9wQDE1CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjMKICAgIC8vIGNvbnN0IG5leHQ6IGJpZ3VpbnQgPSAoMm4gKiB4ICsgbiAvIHgyKSAvIDNuOwogICAgYnl0ZWMgMTcgLy8gMHgwMgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgYioKICAgIGZyYW1lX2RpZyAtMQogICAgZnJhbWVfZGlnIDMKICAgIGIvCiAgICBiKwogICAgYnl0ZWMgMjYgLy8gMHgwMwogICAgYi8KICAgIGR1cAogICAgZnJhbWVfYnVyeSAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MjQKICAgIC8vIGlmIChuZXh0ID09PSB4IHx8IG5leHQgPT09IHggLSAxbikgewogICAgYj09CiAgICBibnogY2JydF9pZl9ib2R5QDEwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2RpZyAwCiAgICBiPT0KICAgIGJ6IGNicnRfYWZ0ZXJfaWZfZWxzZUAxMQoKY2JydF9pZl9ib2R5QDEwOgogICAgZnJhbWVfZGlnIDAKICAgIGZyYW1lX2J1cnkgMQoKY2JydF93aGlsZV90b3BAMTU6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Bvb2wuY29udHJhY3QuYWxnby50czo1MzIKICAgIC8vIHdoaWxlICgoeCArIDFuKSAqICh4ICsgMW4pICogKHggKyAxbikgPD0gbikgeCArPSAxbjsKICAgIGZyYW1lX2RpZyAxCiAgICBieXRlYyAxMCAvLyAweDAxCiAgICBiKwogICAgZHVwCiAgICBmcmFtZV9idXJ5IDIKICAgIGR1cAogICAgZGlnIDEKICAgIGIqCiAgICBiKgogICAgZnJhbWVfZGlnIC0xCiAgICBiPD0KICAgIGJ6IGNicnRfd2hpbGVfdG9wQDE4CiAgICBmcmFtZV9kaWcgMgogICAgZnJhbWVfYnVyeSAxCiAgICBiIGNicnRfd2hpbGVfdG9wQDE1CgpjYnJ0X3doaWxlX3RvcEAxODoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzMwogICAgLy8gd2hpbGUgKHggKiB4ICogeCA+IG4pIHggLT0gMW47CiAgICBmcmFtZV9kaWcgMQogICAgZHVwCiAgICBkaWcgMQogICAgYioKICAgIGIqCiAgICBmcmFtZV9kaWcgLTEKICAgIGI+CiAgICBieiBjYnJ0X2FmdGVyX3doaWxlQDIwCiAgICBmcmFtZV9kaWcgMQogICAgYnl0ZWMgMTAgLy8gMHgwMQogICAgYi0KICAgIGZyYW1lX2J1cnkgMQogICAgYiBjYnJ0X3doaWxlX3RvcEAxOAoKY2JydF9hZnRlcl93aGlsZUAyMDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcG9vbC5jb250cmFjdC5hbGdvLnRzOjUzNAogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbyh4KTsKICAgIGZyYW1lX2RpZyAxCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfYnVyeSAwCiAgICByZXRzdWIKCmNicnRfYWZ0ZXJfaWZfZWxzZUAxMToKICAgIGZyYW1lX2RpZyAwCiAgICBmcmFtZV9idXJ5IDEKICAgIGIgY2JydF93aGlsZV90b3BANQoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5vcHRJblRvQXBwbGljYXRpb24odG86IGJ5dGVzKSAtPiB2b2lkOgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQxCiAgICAvLyBwcm90ZWN0ZWQgb3B0SW5Ub0FwcGxpY2F0aW9uKHRvOiBBY2NvdW50KTogdm9pZCB7CiAgICBwcm90byAxIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MgogICAgLy8gaWYgKCF0aGlzLmJhbGFuY2UodG8pLmhhc1ZhbHVlKSB7CiAgICBmcmFtZV9kaWcgLTEKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDIKICAgIC8vIGlmICghdGhpcy5iYWxhbmNlKHRvKS5oYXNWYWx1ZSkgewogICAgYXBwX2xvY2FsX2dldF9leAogICAgYnVyeSAxCiAgICBibnogc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo0MwogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6NDUKICAgIC8vIGlmICghdGhpcy51c2VyUmV3YXJkRGVidCh0bykuaGFzVmFsdWUpIHsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ1CiAgICAvLyBpZiAoIXRoaXMudXNlclJld2FyZERlYnQodG8pLmhhc1ZhbHVlKSB7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBidXJ5IDEKICAgIGJueiBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIub3B0SW5Ub0FwcGxpY2F0aW9uX2FmdGVyX2lmX2Vsc2VANAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBmcmFtZV9kaWcgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjQ2CiAgICAvLyB0aGlzLnVzZXJSZXdhcmREZWJ0KHRvKS52YWx1ZSA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgYXBwX2xvY2FsX3B1dAoKc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjpSZXdhcmRNYW5hZ2VyLm9wdEluVG9BcHBsaWNhdGlvbl9hZnRlcl9pZl9lbHNlQDQ6CiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZCh1c2VyOiBieXRlcykgLT4gdWludDY0OgpzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OlJld2FyZE1hbmFnZXIucGVuZGluZ1Jld2FyZDoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NS05NgogICAgLy8gQGFiaW1ldGhvZCh7IHJlYWRvbmx5OiB0cnVlIH0pCiAgICAvLyBwZW5kaW5nUmV3YXJkKHVzZXI6IEFjY291bnQpOiB1aW50NjQgewogICAgcHJvdG8gMSAxCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMwogICAgLy8gYmFsYW5jZSA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWNfMyAvLyAiYmFsYW5jZSIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo5NwogICAgLy8gcmV0dXJuIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbygoQmlnVWludCh0aGlzLmJhbGFuY2UodXNlcikudmFsdWUpICogdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUpIC8gUF9TQ0FMRSkgLSB0aGlzLnVzZXJSZXdhcmREZWJ0KHVzZXIpLnZhbHVlOwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBpdG9iCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMwCiAgICAvLyBhY2NSZXdhcmRQZXJTaGFyZVAgPSBHbG9iYWxTdGF0ZTxiaWd1aW50Pih7IGluaXRpYWxWYWx1ZTogMG4gfSk7CiAgICBieXRlYyA4IC8vICJhY2NSZXdhcmRQZXJTaGFyZVAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6OTcKICAgIC8vIHJldHVybiBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodGhpcy5iYWxhbmNlKHVzZXIpLnZhbHVlKSAqIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlKSAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh1c2VyKS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBiKgogICAgYnl0ZWMgOSAvLyAweDAxMDAwMDAwMDAwMDAwCiAgICBiLwogICAgY2FsbHN1YiBiaWd1aW50VG9VaW50NjRNb2R1bG8KICAgIGZyYW1lX2RpZyAtMQogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjk3CiAgICAvLyByZXR1cm4gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHRoaXMuYmFsYW5jZSh1c2VyKS52YWx1ZSkgKiB0aGlzLmFjY1Jld2FyZFBlclNoYXJlUC52YWx1ZSkgLyBQX1NDQUxFKSAtIHRoaXMudXNlclJld2FyZERlYnQodXNlcikudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5hZGRSZXdhcmRzKHJld2FyZEFtb3VudDogdWludDY0KSAtPiB2b2lkOgphZGRSZXdhcmRzOgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMAogICAgLy8gcHJvdGVjdGVkIGFkZFJld2FyZHMocmV3YXJkQW1vdW50OiB1aW50NjQpOiB2b2lkIHsKICAgIHByb3RvIDEgMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMQogICAgLy8gbGV0IHRvdGFsU3VwcGx5ID0gdGhpcy50b3RhbFN1cHBseS52YWx1ZTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBzd2FwCiAgICBkdXAKICAgIHVuY292ZXIgMgogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwMgogICAgLy8gaWYgKHRvdGFsU3VwcGx5ID4gMCkgewogICAgYnogYWRkUmV3YXJkc19hZnRlcl9pZl9lbHNlQDIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDMKICAgIC8vIGNvbnN0IGFkbWluRmVlUmV3YXJkczogdWludDY0ID0gKHJld2FyZEFtb3VudCAqIHRoaXMuYWRtaW5GZWVTaGFyZUJQLnZhbHVlKSAvIEJQOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOAogICAgLy8gYWRtaW5GZWVTaGFyZUJQID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogQlAgLyA1IH0pOyAvLyBEZWZhdWx0IGFkbWluIGZlZSBpcyAyMCUKICAgIGJ5dGVjIDE4IC8vICJhZG1pbkZlZVNoYXJlQlAiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTAzCiAgICAvLyBjb25zdCBhZG1pbkZlZVJld2FyZHM6IHVpbnQ2NCA9IChyZXdhcmRBbW91bnQgKiB0aGlzLmFkbWluRmVlU2hhcmVCUC52YWx1ZSkgLyBCUDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICoKICAgIGludGMgNCAvLyAxMDAwMAogICAgLwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNAogICAgLy8gcmV3YXJkQW1vdW50IC09IGFkbWluRmVlUmV3YXJkczsKICAgIGZyYW1lX2RpZyAtMQogICAgZGlnIDEKICAgIC0KICAgIGZyYW1lX2J1cnkgLTEKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzAKICAgIC8vIGFjY1Jld2FyZFBlclNoYXJlUCA9IEdsb2JhbFN0YXRlPGJpZ3VpbnQ+KHsgaW5pdGlhbFZhbHVlOiAwbiB9KTsKICAgIGJ5dGVjIDggLy8gImFjY1Jld2FyZFBlclNoYXJlUCIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDUKICAgIC8vIHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlICs9IEJpZ1VpbnQocmV3YXJkQW1vdW50KSAqIFBfU0NBTEUgLyBCaWdVaW50KHRvdGFsU3VwcGx5KTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgIGl0b2IKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYioKICAgIGZyYW1lX2RpZyAwCiAgICBpdG9iCiAgICBiLwogICAgYisKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNQogICAgLy8gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWUgKz0gQmlnVWludChyZXdhcmRBbW91bnQpICogUF9TQ0FMRSAvIEJpZ1VpbnQodG90YWxTdXBwbHkpOwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMDYKICAgIC8vIHRoaXMuYWRtaW5GZWVBbW91bnQudmFsdWUgKz0gYWRtaW5GZWVSZXdhcmRzOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMQogICAgLy8gYWRtaW5GZWVBbW91bnQgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgMTEgLy8gImFkbWluRmVlQW1vdW50IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEwNgogICAgLy8gdGhpcy5hZG1pbkZlZUFtb3VudC52YWx1ZSArPSBhZG1pbkZlZVJld2FyZHM7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgKwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMxCiAgICAvLyBhZG1pbkZlZUFtb3VudCA9IEdsb2JhbFN0YXRlPHVpbnQ2ND4oeyBpbml0aWFsVmFsdWU6IDAgfSk7CiAgICBieXRlYyAxMSAvLyAiYWRtaW5GZWVBbW91bnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTA2CiAgICAvLyB0aGlzLmFkbWluRmVlQW1vdW50LnZhbHVlICs9IGFkbWluRmVlUmV3YXJkczsKICAgIHN3YXAKICAgIGFwcF9nbG9iYWxfcHV0CgphZGRSZXdhcmRzX2FmdGVyX2lmX2Vsc2VAMjoKICAgIHJldHN1YgoKCi8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czo6UmV3YXJkTWFuYWdlci5kZXBvc2l0THAodG86IGJ5dGVzLCBscEFtb3VudDogdWludDY0KSAtPiB2b2lkOgpkZXBvc2l0THA6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEwCiAgICAvLyBwcm90ZWN0ZWQgZGVwb3NpdExwKHRvOiBBY2NvdW50LCBscEFtb3VudDogdWludDY0KTogdm9pZCB7CiAgICBwcm90byAyIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTEKICAgIC8vIGNvbnN0IGFjY1Jld2FyZFBlclNoYXJlUCA9IHRoaXMuYWNjUmV3YXJkUGVyU2hhcmVQLnZhbHVlOwogICAgaW50Y18wIC8vIDAKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozMAogICAgLy8gYWNjUmV3YXJkUGVyU2hhcmVQID0gR2xvYmFsU3RhdGU8YmlndWludD4oeyBpbml0aWFsVmFsdWU6IDBuIH0pOwogICAgYnl0ZWMgOCAvLyAiYWNjUmV3YXJkUGVyU2hhcmVQIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMQogICAgLy8gY29uc3QgYWNjUmV3YXJkUGVyU2hhcmVQID0gdGhpcy5hY2NSZXdhcmRQZXJTaGFyZVAudmFsdWU7CiAgICBhcHBfZ2xvYmFsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIEdsb2JhbFN0YXRlIGV4aXN0cwogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMgogICAgLy8gbGV0IHBlbmRpbmc6IHVpbnQ2NCA9IDA7CiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExMwogICAgLy8gbGV0IHVzZXJMcEFtb3VudCA9IHRoaXMuYmFsYW5jZSh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTEzCiAgICAvLyBsZXQgdXNlckxwQW1vdW50ID0gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZTsKICAgIGFwcF9sb2NhbF9nZXRfZXgKICAgIHN3YXAKICAgIGR1cAogICAgdW5jb3ZlciAyCiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTQKICAgIC8vIGlmICh1c2VyTHBBbW91bnQgPiAwKSB7CiAgICBieiBkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUAyCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBmcmFtZV9kaWcgMgogICAgaXRvYgogICAgZnJhbWVfZGlnIDAKICAgIGIqCiAgICBieXRlYyA5IC8vIDB4MDEwMDAwMDAwMDAwMDAKICAgIGIvCiAgICBjYWxsc3ViIGJpZ3VpbnRUb1VpbnQ2NE1vZHVsbwogICAgZnJhbWVfZGlnIC0yCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjM0CiAgICAvLyB1c2VyUmV3YXJkRGVidCA9IExvY2FsU3RhdGU8dWludDY0PigpOwogICAgYnl0ZWMgNSAvLyAidXNlclJld2FyZERlYnQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE1CiAgICAvLyBwZW5kaW5nID0gYmlndWludFRvVWludDY0TW9kdWxvKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCAvIFBfU0NBTEUpIC0gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWU7CiAgICBhcHBfbG9jYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgTG9jYWxTdGF0ZSBleGlzdHMKICAgIC0KICAgIGZyYW1lX2J1cnkgMQoKZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VAMjoKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTcKICAgIC8vIHVzZXJMcEFtb3VudCArPSBscEFtb3VudDsKICAgIGZyYW1lX2RpZyAyCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMTgKICAgIC8vIHRoaXMuYmFsYW5jZSh0bykudmFsdWUgKz0gbHBBbW91bnQ7CiAgICBmcmFtZV9kaWcgLTIKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MzMKICAgIC8vIGJhbGFuY2UgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjXzMgLy8gImJhbGFuY2UiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE4CiAgICAvLyB0aGlzLmJhbGFuY2UodG8pLnZhbHVlICs9IGxwQW1vdW50OwogICAgYXBwX2xvY2FsX2dldF9leAogICAgYXNzZXJ0IC8vIGNoZWNrIExvY2FsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIGZyYW1lX2RpZyAtMgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjMzCiAgICAvLyBiYWxhbmNlID0gTG9jYWxTdGF0ZTx1aW50NjQ+KCk7CiAgICBieXRlY18zIC8vICJiYWxhbmNlIgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOAogICAgLy8gdGhpcy5iYWxhbmNlKHRvKS52YWx1ZSArPSBscEFtb3VudDsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGludGNfMCAvLyAwCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MjkKICAgIC8vIHRvdGFsU3VwcGx5ID0gR2xvYmFsU3RhdGU8dWludDY0Pih7IGluaXRpYWxWYWx1ZTogMCB9KTsKICAgIGJ5dGVjIDcgLy8gInRvdGFsU3VwcGx5IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjExOQogICAgLy8gdGhpcy50b3RhbFN1cHBseS52YWx1ZSArPSBscEFtb3VudDsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTEKICAgICsKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoyOQogICAgLy8gdG90YWxTdXBwbHkgPSBHbG9iYWxTdGF0ZTx1aW50NjQ+KHsgaW5pdGlhbFZhbHVlOiAwIH0pOwogICAgYnl0ZWMgNyAvLyAidG90YWxTdXBwbHkiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTE5CiAgICAvLyB0aGlzLnRvdGFsU3VwcGx5LnZhbHVlICs9IGxwQW1vdW50OwogICAgc3dhcAogICAgYXBwX2dsb2JhbF9wdXQKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czoxMjEKICAgIC8vIHRoaXMudXNlclJld2FyZERlYnQodG8pLnZhbHVlID0gYmlndWludFRvVWludDY0TW9kdWxvKChCaWdVaW50KHVzZXJMcEFtb3VudCkgKiBhY2NSZXdhcmRQZXJTaGFyZVApIC8gUF9TQ0FMRSk7CiAgICBpdG9iCiAgICBmcmFtZV9kaWcgMAogICAgYioKICAgIGJ5dGVjIDkgLy8gMHgwMTAwMDAwMDAwMDAwMAogICAgYi8KICAgIGNhbGxzdWIgYmlndWludFRvVWludDY0TW9kdWxvCiAgICBmcmFtZV9kaWcgLTIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvcmV3YXJkLW1hbmFnZXIuYWxnby50czozNAogICAgLy8gdXNlclJld2FyZERlYnQgPSBMb2NhbFN0YXRlPHVpbnQ2ND4oKTsKICAgIGJ5dGVjIDUgLy8gInVzZXJSZXdhcmREZWJ0IgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMQogICAgLy8gdGhpcy51c2VyUmV3YXJkRGVidCh0bykudmFsdWUgPSBiaWd1aW50VG9VaW50NjRNb2R1bG8oKEJpZ1VpbnQodXNlckxwQW1vdW50KSAqIGFjY1Jld2FyZFBlclNoYXJlUCkgLyBQX1NDQUxFKTsKICAgIHVuY292ZXIgMgogICAgYXBwX2xvY2FsX3B1dAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMgogICAgLy8gaWYgKHBlbmRpbmcgPiAwKSB7CiAgICBmcmFtZV9kaWcgMQogICAgYnogZGVwb3NpdExwX2FmdGVyX2lmX2Vsc2VANQogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyMwogICAgLy8gaXR4bi5hc3NldFRyYW5zZmVyKHsgeGZlckFzc2V0OiB0aGlzLmFzc2V0LnZhbHVlLCBhc3NldEFtb3VudDogcGVuZGluZywgYXNzZXRSZWNlaXZlcjogdG8gfSkuc3VibWl0KCk7CiAgICBpdHhuX2JlZ2luCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjI3CiAgICAvLyBhc3NldCA9IEdsb2JhbFN0YXRlPEFzc2V0PigpOwogICAgYnl0ZWNfMiAvLyAiYXNzZXQiCiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTIzCiAgICAvLyBpdHhuLmFzc2V0VHJhbnNmZXIoeyB4ZmVyQXNzZXQ6IHRoaXMuYXNzZXQudmFsdWUsIGFzc2V0QW1vdW50OiBwZW5kaW5nLCBhc3NldFJlY2VpdmVyOiB0byB9KS5zdWJtaXQoKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICBmcmFtZV9kaWcgLTIKICAgIGl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgogICAgZnJhbWVfZGlnIDEKICAgIGR1cAogICAgY292ZXIgMgogICAgaXR4bl9maWVsZCBBc3NldEFtb3VudAogICAgaXR4bl9maWVsZCBYZmVyQXNzZXQKICAgIHB1c2hpbnQgNCAvLyA0CiAgICBpdHhuX2ZpZWxkIFR5cGVFbnVtCiAgICBpbnRjXzAgLy8gMAogICAgaXR4bl9maWVsZCBGZWUKICAgIGl0eG5fc3VibWl0CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL3Jld2FyZC1tYW5hZ2VyLmFsZ28udHM6MTI0CiAgICAvLyBlbWl0PFJld2FyZHNDbGFpbWVkPih7IHVzZXI6IG5ldyBBZGRyZXNzKHRvKSwgcGVuZGluZyB9KTsKICAgIGl0b2IKICAgIGZyYW1lX2RpZyAtMgogICAgc3dhcAogICAgY29uY2F0CiAgICBieXRlYyAyNSAvLyBtZXRob2QgIlJld2FyZHNDbGFpbWVkKGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCgpkZXBvc2l0THBfYWZ0ZXJfaWZfZWxzZUA1OgogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9yZXdhcmQtbWFuYWdlci5hbGdvLnRzOjEyNgogICAgLy8gZW1pdDxEZXBvc2l0Pih7IHRvOiBuZXcgQWRkcmVzcyh0byksIGxwQW1vdW50IH0pOwogICAgZnJhbWVfZGlnIC0xCiAgICBpdG9iCiAgICBmcmFtZV9kaWcgLTIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgcHVzaGJ5dGVzIDB4Y2ZhYjg3MjMgLy8gbWV0aG9kICJEZXBvc2l0KGFkZHJlc3MsdWludDY0KSIKICAgIHN3YXAKICAgIGNvbmNhdAogICAgbG9nCiAgICByZXRzdWIKCgovLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czo6T3duYWJsZS5vbmx5T3duZXIoKSAtPiB2b2lkOgpvbmx5T3duZXI6CiAgICAvLyBzbWFydF9jb250cmFjdHMvY29udHJhY3RzL293bmFibGUuYWxnby50czoxMwogICAgLy8gYXNzZXJ0KG9wLlR4bi5zZW5kZXIuYnl0ZXMgPT09IHRoaXMub3duZXIudmFsdWUuYnl0ZXMsICdPbmx5IG93bmVyJyk7CiAgICB0eG4gU2VuZGVyCiAgICBpbnRjXzAgLy8gMAogICAgLy8gc21hcnRfY29udHJhY3RzL2NvbnRyYWN0cy9vd25hYmxlLmFsZ28udHM6NgogICAgLy8gcHJvdGVjdGVkIG93bmVyID0gR2xvYmFsU3RhdGU8QWRkcmVzcz4oKTsKICAgIGJ5dGVjIDE0IC8vICJvd25lciIKICAgIC8vIHNtYXJ0X2NvbnRyYWN0cy9jb250cmFjdHMvb3duYWJsZS5hbGdvLnRzOjEzCiAgICAvLyBhc3NlcnQob3AuVHhuLnNlbmRlci5ieXRlcyA9PT0gdGhpcy5vd25lci52YWx1ZS5ieXRlcywgJ09ubHkgb3duZXInKTsKICAgIGFwcF9nbG9iYWxfZ2V0X2V4CiAgICBhc3NlcnQgLy8gY2hlY2sgR2xvYmFsU3RhdGUgZXhpc3RzCiAgICA9PQogICAgYXNzZXJ0IC8vIE9ubHkgb3duZXIKICAgIHJldHN1Ygo=\",\n clear:\n \"I3ByYWdtYSB2ZXJzaW9uIDExCiNwcmFnbWEgdHlwZXRyYWNrIGZhbHNlCgovLyBAYWxnb3JhbmRmb3VuZGF0aW9uL2FsZ29yYW5kLXR5cGVzY3JpcHQvYmFzZS1jb250cmFjdC5kLnRzOjpCYXNlQ29udHJhY3QuY2xlYXJTdGF0ZVByb2dyYW0oKSAtPiB1aW50NjQ6Cm1haW46CiAgICBwdXNoaW50IDEgLy8gMQogICAgcmV0dXJuCg==\",\n },\n byteCode: {\n approval:\n \"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\",\n clear: \"C4EBQw==\",\n },\n events: [\n {\n name: \"RewardsClaimed\",\n args: [\n { type: \"address\", name: \"user\" },\n { type: \"uint64\", name: \"pending\" },\n ],\n },\n {\n name: \"Withdraw\",\n args: [\n { type: \"address\", name: \"from\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n {\n name: \"Deposit\",\n args: [\n { type: \"address\", name: \"to\" },\n { type: \"uint64\", name: \"lpAmount\" },\n ],\n },\n {\n name: \"SwappedToVUsd\",\n args: [\n { type: \"address\", name: \"sender\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n {\n name: \"SwappedFromVUsd\",\n args: [\n { type: \"address\", name: \"recipient\" },\n { type: \"uint64\", name: \"tokenId\" },\n { type: \"uint64\", name: \"vUsdAmount\" },\n { type: \"uint64\", name: \"amount\" },\n { type: \"uint64\", name: \"fee\" },\n ],\n },\n ],\n templateVariables: {},\n} as unknown as Arc56Contract;\n\n/**\n * A state record containing binary data\n */\nexport interface BinaryState {\n /**\n * Gets the state value as a Uint8Array\n */\n asByteArray(): Uint8Array | undefined;\n /**\n * Gets the state value as a string\n */\n asString(): string | undefined;\n}\n\nclass BinaryStateValue implements BinaryState {\n constructor(private value: Uint8Array | undefined) {}\n\n asByteArray(): Uint8Array | undefined {\n return this.value;\n }\n\n asString(): string | undefined {\n return this.value !== undefined ? Buffer.from(this.value).toString(\"utf-8\") : undefined;\n }\n}\n\n/**\n * Expands types for IntelliSense so they are more human readable\n * See https://stackoverflow.com/a/69288824\n */\nexport type Expand<T> = T extends (...args: infer A) => infer R\n ? (...args: Expand<A>) => Expand<R>\n : T extends infer O\n ? { [K in keyof O]: O[K] }\n : never;\n\n/**\n * The argument types for the Pool contract\n */\nexport type PoolArgs = {\n /**\n * The object representation of the arguments for each method\n */\n obj: {\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\": {\n owner: string;\n router: string;\n a: bigint | number;\n asset: bigint | number;\n feeShareBp: bigint | number;\n balanceRatioMinBp: bigint | number;\n };\n \"optInToApplication()void\": Record<string, never>;\n \"closeOutOfApplication(uint64)void\": {\n budget?: bigint | number;\n };\n \"optInAsset()void\": Record<string, never>;\n \"deposit(axfer,uint64)void\": {\n assetTransferRef: AppMethodCallTransactionArgument;\n budget?: bigint | number;\n };\n \"withdraw(uint64,uint64)void\": {\n /**\n * The Withdrawn amount\n */\n amountLp: bigint | number;\n budget?: bigint | number;\n };\n \"swapToVUsd(address,uint64,bool)uint64\": {\n /**\n * The address of the sender.\n */\n user: string;\n /**\n * The amount of tokens to swap.\n */\n amount: bigint | number;\n /**\n * When true it allows to swap without incurring any fees. It is intended for use with service\n accounts.\n\n */\n zeroFee: boolean;\n };\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\": {\n /**\n * The address of the recipient.\n */\n user: string;\n /**\n * The amount of vUSD to swap.\n */\n amount: bigint | number;\n /**\n * The minimum amount of tokens required to be received during the swap, otherwise the\n transaction reverts.\n\n */\n receiveAmountMin: bigint | number;\n /**\n * When true it allows to swap without incurring any fees. It is intended for use with service\n accounts.\n\n */\n zeroFee: boolean;\n };\n \"setFeeShare(uint64)void\": {\n feeShareBp: bigint | number;\n };\n \"adjustTotalLpAmount()void\": Record<string, never>;\n \"setBalanceRatioMinBP(uint64)void\": {\n balanceRatioMinBp: bigint | number;\n };\n \"stopDeposit()void\": Record<string, never>;\n \"startDeposit()void\": Record<string, never>;\n \"stopWithdraw()void\": Record<string, never>;\n \"startWithdraw()void\": Record<string, never>;\n \"setStopAuthority(address)void\": {\n stopAuthority: string;\n };\n \"setRouter(address)void\": {\n router: string;\n };\n \"claimRewards()void\": Record<string, never>;\n \"setAdminFeeShare(uint64)void\": {\n adminFeeShareBp: bigint | number;\n };\n \"claimAdminFee()void\": Record<string, never>;\n \"pendingReward(address)uint64\": {\n user: string;\n };\n \"transferOwnership(address)void\": {\n newOwner: string;\n };\n };\n /**\n * The tuple representation of the arguments for each method\n */\n tuple: {\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\": [\n owner: string,\n router: string,\n a: bigint | number,\n asset: bigint | number,\n feeShareBp: bigint | number,\n balanceRatioMinBp: bigint | number,\n ];\n \"optInToApplication()void\": [];\n \"closeOutOfApplication(uint64)void\": [budget: bigint | number | undefined];\n \"optInAsset()void\": [];\n \"deposit(axfer,uint64)void\": [\n assetTransferRef: AppMethodCallTransactionArgument,\n budget: bigint | number | undefined,\n ];\n \"withdraw(uint64,uint64)void\": [amountLp: bigint | number, budget: bigint | number | undefined];\n \"swapToVUsd(address,uint64,bool)uint64\": [user: string, amount: bigint | number, zeroFee: boolean];\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\": [\n user: string,\n amount: bigint | number,\n receiveAmountMin: bigint | number,\n zeroFee: boolean,\n ];\n \"setFeeShare(uint64)void\": [feeShareBp: bigint | number];\n \"adjustTotalLpAmount()void\": [];\n \"setBalanceRatioMinBP(uint64)void\": [balanceRatioMinBp: bigint | number];\n \"stopDeposit()void\": [];\n \"startDeposit()void\": [];\n \"stopWithdraw()void\": [];\n \"startWithdraw()void\": [];\n \"setStopAuthority(address)void\": [stopAuthority: string];\n \"setRouter(address)void\": [router: string];\n \"claimRewards()void\": [];\n \"setAdminFeeShare(uint64)void\": [adminFeeShareBp: bigint | number];\n \"claimAdminFee()void\": [];\n \"pendingReward(address)uint64\": [user: string];\n \"transferOwnership(address)void\": [newOwner: string];\n };\n};\n\n/**\n * The return type for each method\n */\nexport type PoolReturns = {\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\": void;\n \"optInToApplication()void\": void;\n \"closeOutOfApplication(uint64)void\": void;\n \"optInAsset()void\": void;\n \"deposit(axfer,uint64)void\": void;\n \"withdraw(uint64,uint64)void\": void;\n \"swapToVUsd(address,uint64,bool)uint64\": bigint;\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\": bigint;\n \"setFeeShare(uint64)void\": void;\n \"adjustTotalLpAmount()void\": void;\n \"setBalanceRatioMinBP(uint64)void\": void;\n \"stopDeposit()void\": void;\n \"startDeposit()void\": void;\n \"stopWithdraw()void\": void;\n \"startWithdraw()void\": void;\n \"setStopAuthority(address)void\": void;\n \"setRouter(address)void\": void;\n \"claimRewards()void\": void;\n \"setAdminFeeShare(uint64)void\": void;\n \"claimAdminFee()void\": void;\n \"pendingReward(address)uint64\": bigint;\n \"transferOwnership(address)void\": void;\n};\n\n/**\n * Defines the types of available calls and state of the Pool smart contract.\n */\nexport type PoolTypes = {\n /**\n * Maps method signatures / names to their argument and return types.\n */\n methods: Record<\n \"createApplication(address,address,uint64,uint64,uint64,uint64)void\" | \"createApplication\",\n {\n argsObj: PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"];\n returns: PoolReturns[\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"];\n }\n > &\n Record<\n \"optInToApplication()void\" | \"optInToApplication\",\n {\n argsObj: PoolArgs[\"obj\"][\"optInToApplication()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"optInToApplication()void\"];\n returns: PoolReturns[\"optInToApplication()void\"];\n }\n > &\n Record<\n \"closeOutOfApplication(uint64)void\" | \"closeOutOfApplication\",\n {\n argsObj: PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"];\n returns: PoolReturns[\"closeOutOfApplication(uint64)void\"];\n }\n > &\n Record<\n \"optInAsset()void\" | \"optInAsset\",\n {\n argsObj: PoolArgs[\"obj\"][\"optInAsset()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"optInAsset()void\"];\n returns: PoolReturns[\"optInAsset()void\"];\n }\n > &\n Record<\n \"deposit(axfer,uint64)void\" | \"deposit\",\n {\n argsObj: PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"];\n returns: PoolReturns[\"deposit(axfer,uint64)void\"];\n }\n > &\n Record<\n \"withdraw(uint64,uint64)void\" | \"withdraw\",\n {\n argsObj: PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"];\n returns: PoolReturns[\"withdraw(uint64,uint64)void\"];\n }\n > &\n Record<\n \"swapToVUsd(address,uint64,bool)uint64\" | \"swapToVUsd\",\n {\n argsObj: PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"];\n /**\n * returns the difference between the old and the new value of vUsdBalance\n */\n returns: PoolReturns[\"swapToVUsd(address,uint64,bool)uint64\"];\n }\n > &\n Record<\n \"swapFromVUsd(address,uint64,uint64,bool)uint64\" | \"swapFromVUsd\",\n {\n argsObj: PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"];\n /**\n * returns the difference between the old and the new value of vUsdBalance\n */\n returns: PoolReturns[\"swapFromVUsd(address,uint64,uint64,bool)uint64\"];\n }\n > &\n Record<\n \"setFeeShare(uint64)void\" | \"setFeeShare\",\n {\n argsObj: PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"];\n returns: PoolReturns[\"setFeeShare(uint64)void\"];\n }\n > &\n Record<\n \"adjustTotalLpAmount()void\" | \"adjustTotalLpAmount\",\n {\n argsObj: PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"];\n returns: PoolReturns[\"adjustTotalLpAmount()void\"];\n }\n > &\n Record<\n \"setBalanceRatioMinBP(uint64)void\" | \"setBalanceRatioMinBP\",\n {\n argsObj: PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"];\n returns: PoolReturns[\"setBalanceRatioMinBP(uint64)void\"];\n }\n > &\n Record<\n \"stopDeposit()void\" | \"stopDeposit\",\n {\n argsObj: PoolArgs[\"obj\"][\"stopDeposit()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"stopDeposit()void\"];\n returns: PoolReturns[\"stopDeposit()void\"];\n }\n > &\n Record<\n \"startDeposit()void\" | \"startDeposit\",\n {\n argsObj: PoolArgs[\"obj\"][\"startDeposit()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"startDeposit()void\"];\n returns: PoolReturns[\"startDeposit()void\"];\n }\n > &\n Record<\n \"stopWithdraw()void\" | \"stopWithdraw\",\n {\n argsObj: PoolArgs[\"obj\"][\"stopWithdraw()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"stopWithdraw()void\"];\n returns: PoolReturns[\"stopWithdraw()void\"];\n }\n > &\n Record<\n \"startWithdraw()void\" | \"startWithdraw\",\n {\n argsObj: PoolArgs[\"obj\"][\"startWithdraw()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"startWithdraw()void\"];\n returns: PoolReturns[\"startWithdraw()void\"];\n }\n > &\n Record<\n \"setStopAuthority(address)void\" | \"setStopAuthority\",\n {\n argsObj: PoolArgs[\"obj\"][\"setStopAuthority(address)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"];\n returns: PoolReturns[\"setStopAuthority(address)void\"];\n }\n > &\n Record<\n \"setRouter(address)void\" | \"setRouter\",\n {\n argsObj: PoolArgs[\"obj\"][\"setRouter(address)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setRouter(address)void\"];\n returns: PoolReturns[\"setRouter(address)void\"];\n }\n > &\n Record<\n \"claimRewards()void\" | \"claimRewards\",\n {\n argsObj: PoolArgs[\"obj\"][\"claimRewards()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"claimRewards()void\"];\n returns: PoolReturns[\"claimRewards()void\"];\n }\n > &\n Record<\n \"setAdminFeeShare(uint64)void\" | \"setAdminFeeShare\",\n {\n argsObj: PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"];\n returns: PoolReturns[\"setAdminFeeShare(uint64)void\"];\n }\n > &\n Record<\n \"claimAdminFee()void\" | \"claimAdminFee\",\n {\n argsObj: PoolArgs[\"obj\"][\"claimAdminFee()void\"];\n argsTuple: PoolArgs[\"tuple\"][\"claimAdminFee()void\"];\n returns: PoolReturns[\"claimAdminFee()void\"];\n }\n > &\n Record<\n \"pendingReward(address)uint64\" | \"pendingReward\",\n {\n argsObj: PoolArgs[\"obj\"][\"pendingReward(address)uint64\"];\n argsTuple: PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"];\n returns: PoolReturns[\"pendingReward(address)uint64\"];\n }\n > &\n Record<\n \"transferOwnership(address)void\" | \"transferOwnership\",\n {\n argsObj: PoolArgs[\"obj\"][\"transferOwnership(address)void\"];\n argsTuple: PoolArgs[\"tuple\"][\"transferOwnership(address)void\"];\n returns: PoolReturns[\"transferOwnership(address)void\"];\n }\n >;\n /**\n * Defines the shape of the state of the application.\n */\n state: {\n global: {\n keys: {\n feeShareBp: bigint;\n router: string;\n tokenBalance: bigint;\n vUsdBalance: bigint;\n balanceRatioMinBp: bigint;\n reserves: bigint;\n a: bigint;\n d: bigint;\n tokenAmountReduce: bigint;\n tokenAmountIncrease: bigint;\n stopAuthority: string;\n canDeposit: bigint;\n canWithdraw: bigint;\n asset: bigint;\n adminFeeShareBp: bigint;\n totalSupply: bigint;\n accRewardPerShareP: BinaryState;\n adminFeeAmount: bigint;\n owner: string;\n };\n maps: {};\n };\n local: {\n keys: {\n balance: bigint;\n userRewardDebt: bigint;\n };\n maps: {};\n };\n };\n};\n\n/**\n * Defines the possible abi call signatures.\n */\nexport type PoolSignatures = keyof PoolTypes[\"methods\"];\n/**\n * Defines the possible abi call signatures for methods that return a non-void value.\n */\nexport type PoolNonVoidMethodSignatures = keyof PoolTypes[\"methods\"] extends infer T\n ? T extends keyof PoolTypes[\"methods\"]\n ? MethodReturn<T> extends void\n ? never\n : T\n : never\n : never;\n/**\n * Defines an object containing all relevant parameters for a single call to the contract.\n */\nexport type CallParams<TArgs> = Expand<\n Omit<AppClientMethodCallParams, \"method\" | \"args\" | \"onComplete\"> & {\n /** The args for the ABI method call, either as an ordered array or an object */\n args: Expand<TArgs>;\n }\n>;\n/**\n * Maps a method signature from the Pool smart contract to the method's arguments in either tuple or struct form\n */\nexport type MethodArgs<TSignature extends PoolSignatures> = PoolTypes[\"methods\"][TSignature][\"argsObj\" | \"argsTuple\"];\n/**\n * Maps a method signature from the Pool smart contract to the method's return type\n */\nexport type MethodReturn<TSignature extends PoolSignatures> = PoolTypes[\"methods\"][TSignature][\"returns\"];\n\n/**\n * Defines the shape of the keyed global state of the application.\n */\nexport type GlobalKeysState = PoolTypes[\"state\"][\"global\"][\"keys\"];\n\n/**\n * Defines the shape of the keyed local state of the application.\n */\nexport type LocalKeysState = PoolTypes[\"state\"][\"local\"][\"keys\"];\n\n/**\n * Defines supported create method params for this smart contract\n */\nexport type PoolCreateCallParams =\n | Expand<\n CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > & { method: \"createApplication\" } & { onComplete?: OnApplicationComplete.NoOpOC } & CreateSchema\n >\n | Expand<\n CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > & { method: \"createApplication(address,address,uint64,uint64,uint64,uint64)void\" } & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } & CreateSchema\n >;\n/**\n * Defines arguments required for the deploy method.\n */\nexport type PoolDeployParams = Expand<\n Omit<AppFactoryDeployParams, \"createParams\" | \"updateParams\" | \"deleteParams\"> & {\n /**\n * Create transaction parameters to use if a create needs to be issued as part of deployment; use `method` to define ABI call (if available) or leave out for a bare call (if available)\n */\n createParams?: PoolCreateCallParams;\n }\n>;\n\n/**\n * Exposes methods for constructing `AppClient` params objects for ABI calls to the Pool smart contract\n */\nexport abstract class PoolParamsFactory {\n /**\n * Gets available create ABI call param factories\n */\n static get create() {\n return {\n _resolveByMethod<TParams extends PoolCreateCallParams & { method: string }>(params: TParams) {\n switch (params.method) {\n case \"createApplication\":\n case \"createApplication(address,address,uint64,uint64,uint64,uint64)void\":\n return PoolParamsFactory.create.createApplication(params);\n }\n throw new Error(`Unknown ' + verb + ' method`);\n },\n\n /**\n * Constructs create ABI call params for the Pool smart contract using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n createApplication(\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ): AppClientMethodCallParams & AppClientCompilationParams & { onComplete?: OnApplicationComplete.NoOpOC } {\n return {\n ...params,\n method: \"createApplication(address,address,uint64,uint64,uint64,uint64)void\" as const,\n args: Array.isArray(params.args)\n ? params.args\n : [\n params.args.owner,\n params.args.router,\n params.args.a,\n params.args.asset,\n params.args.feeShareBp,\n params.args.balanceRatioMinBp,\n ],\n };\n },\n };\n }\n\n /**\n * Gets available optIn ABI call param factories\n */\n static get optIn() {\n return {\n /**\n * Constructs opt-in ABI call params for the Pool smart contract using the optInToApplication()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n optInToApplication(\n params: CallParams<PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]>\n ): AppClientMethodCallParams {\n return {\n ...params,\n method: \"optInToApplication()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n },\n /**\n * Constructs opt-in ABI call params for the Pool smart contract using the deposit(axfer,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n deposit(\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n >\n ): AppClientMethodCallParams {\n return {\n ...params,\n method: \"deposit(axfer,uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.assetTransferRef, params.args.budget],\n };\n },\n };\n }\n\n /**\n * Gets available closeOut ABI call param factories\n */\n static get closeOut() {\n return {\n /**\n * Constructs close out ABI call params for the Pool smart contract using the closeOutOfApplication(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n closeOutOfApplication(\n params: CallParams<\n PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"] | PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"]\n >\n ): AppClientMethodCallParams {\n return {\n ...params,\n method: \"closeOutOfApplication(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.budget],\n };\n },\n };\n }\n\n /**\n * Constructs a no op call for the optInAsset()void ABI method\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static optInAsset(\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"optInAsset()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the deposit(axfer,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static deposit(\n params: CallParams<PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"deposit(axfer,uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.assetTransferRef, params.args.budget],\n };\n }\n /**\n * Constructs a no op call for the withdraw(uint64,uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static withdraw(\n params: CallParams<\n PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"withdraw(uint64,uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.amountLp, params.args.budget],\n };\n }\n /**\n * Constructs a no op call for the swapToVUsd(address,uint64,bool)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static swapToVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"swapToVUsd(address,uint64,bool)uint64\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.user, params.args.amount, params.args.zeroFee],\n };\n }\n /**\n * Constructs a no op call for the swapFromVUsd(address,uint64,uint64,bool)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static swapFromVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"swapFromVUsd(address,uint64,uint64,bool)uint64\" as const,\n args: Array.isArray(params.args)\n ? params.args\n : [params.args.user, params.args.amount, params.args.receiveAmountMin, params.args.zeroFee],\n };\n }\n /**\n * Constructs a no op call for the setFeeShare(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setFeeShare(\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setFeeShare(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.feeShareBp],\n };\n }\n /**\n * Constructs a no op call for the adjustTotalLpAmount()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static adjustTotalLpAmount(\n params: CallParams<PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"adjustTotalLpAmount()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the setBalanceRatioMinBP(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setBalanceRatioMinBp(\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setBalanceRatioMinBP(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.balanceRatioMinBp],\n };\n }\n /**\n * Constructs a no op call for the stopDeposit()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static stopDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"stopDeposit()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the startDeposit()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static startDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"startDeposit()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the stopWithdraw()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static stopWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"stopWithdraw()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the startWithdraw()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static startWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"startWithdraw()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the setStopAuthority(address)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setStopAuthority(\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setStopAuthority(address)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.stopAuthority],\n };\n }\n /**\n * Constructs a no op call for the setRouter(address)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setRouter(\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setRouter(address)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.router],\n };\n }\n /**\n * Constructs a no op call for the claimRewards()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static claimRewards(\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"claimRewards()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the setAdminFeeShare(uint64)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static setAdminFeeShare(\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"setAdminFeeShare(uint64)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.adminFeeShareBp],\n };\n }\n /**\n * Constructs a no op call for the claimAdminFee()void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static claimAdminFee(\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"claimAdminFee()void\" as const,\n args: Array.isArray(params.args) ? params.args : [],\n };\n }\n /**\n * Constructs a no op call for the pendingReward(address)uint64 ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static pendingReward(\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"pendingReward(address)uint64\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.user],\n };\n }\n /**\n * Constructs a no op call for the transferOwnership(address)void ABI method\n *\n * @param params Parameters for the call\n * @returns An `AppClientMethodCallParams` object for the call\n */\n static transferOwnership(\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > &\n CallOnComplete\n ): AppClientMethodCallParams & CallOnComplete {\n return {\n ...params,\n method: \"transferOwnership(address)void\" as const,\n args: Array.isArray(params.args) ? params.args : [params.args.newOwner],\n };\n }\n}\n\n/**\n * A factory to create and deploy one or more instance of the Pool smart contract and to create one or more app clients to interact with those (or other) app instances\n */\nexport class PoolFactory {\n /**\n * The underlying `AppFactory` for when you want to have more flexibility\n */\n public readonly appFactory: _AppFactory;\n\n /**\n * Creates a new instance of `PoolFactory`\n *\n * @param params The parameters to initialise the app factory with\n */\n constructor(params: Omit<AppFactoryParams, \"appSpec\">) {\n this.appFactory = new _AppFactory({\n ...params,\n appSpec: APP_SPEC,\n });\n }\n\n /** The name of the app (from the ARC-32 / ARC-56 app spec or override). */\n public get appName() {\n return this.appFactory.appName;\n }\n\n /** The ARC-56 app spec being used */\n get appSpec() {\n return APP_SPEC;\n }\n\n /** A reference to the underlying `AlgorandClient` this app factory is using. */\n public get algorand(): AlgorandClient {\n return this.appFactory.algorand;\n }\n\n /**\n * Returns a new `AppClient` client for an app instance of the given ID.\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public getAppClientById(params: AppFactoryAppClientParams) {\n return new PoolClient(this.appFactory.getAppClientById(params));\n }\n\n /**\n * Returns a new `AppClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n *\n * Automatically populates appName, defaultSender and source maps from the factory\n * if not specified in the params.\n * @param params The parameters to create the app client\n * @returns The `AppClient`\n */\n public async getAppClientByCreatorAndName(params: AppFactoryResolveAppClientByCreatorAndNameParams) {\n return new PoolClient(await this.appFactory.getAppClientByCreatorAndName(params));\n }\n\n /**\n * Idempotently deploys the Pool smart contract.\n *\n * @param params The arguments for the contract calls and any additional parameters for the call\n * @returns The deployment result\n */\n public async deploy(params: PoolDeployParams = {}) {\n const result = await this.appFactory.deploy({\n ...params,\n createParams: params.createParams?.method\n ? PoolParamsFactory.create._resolveByMethod(params.createParams)\n : params.createParams\n ? (params.createParams as PoolCreateCallParams & { args: Uint8Array[] })\n : undefined,\n });\n return { result: result.result, appClient: new PoolClient(result.appClient) };\n }\n\n /**\n * Get parameters to create transactions (create and deploy related calls) for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Pool smart contract using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create params\n */\n createApplication: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams &\n CreateSchema & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appFactory.params.create(PoolParamsFactory.create.createApplication(params));\n },\n },\n };\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Pool smart contract using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create transaction\n */\n createApplication: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams &\n CreateSchema & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appFactory.createTransaction.create(PoolParamsFactory.create.createApplication(params));\n },\n },\n };\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available create methods\n */\n create: {\n /**\n * Creates a new instance of the Pool smart contract using an ABI method call using the createApplication(address,address,uint64,uint64,uint64,uint64)void ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The create result\n */\n createApplication: async (\n params: CallParams<\n | PoolArgs[\"obj\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n | PoolArgs[\"tuple\"][\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"]\n > &\n AppClientCompilationParams &\n CreateSchema &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appFactory.send.create(PoolParamsFactory.create.createApplication(params));\n return {\n result: {\n ...result.result,\n return: result.result.return as unknown as\n | undefined\n | PoolReturns[\"createApplication(address,address,uint64,uint64,uint64,uint64)void\"],\n },\n appClient: new PoolClient(result.appClient),\n };\n },\n },\n };\n}\n/**\n * A client to make calls to the Pool smart contract\n */\nexport class PoolClient {\n /**\n * The underlying `AppClient` for when you want to have more flexibility\n */\n public readonly appClient: _AppClient;\n\n /**\n * Creates a new instance of `PoolClient`\n *\n * @param appClient An `AppClient` instance which has been created with the Pool app spec\n */\n constructor(appClient: _AppClient);\n /**\n * Creates a new instance of `PoolClient`\n *\n * @param params The parameters to initialise the app client with\n */\n constructor(params: Omit<AppClientParams, \"appSpec\">);\n constructor(appClientOrParams: _AppClient | Omit<AppClientParams, \"appSpec\">) {\n this.appClient =\n appClientOrParams instanceof _AppClient\n ? appClientOrParams\n : new _AppClient({\n ...appClientOrParams,\n appSpec: APP_SPEC,\n });\n }\n\n /**\n * Checks for decode errors on the given return value and maps the return value to the return type for the given method\n * @returns The typed return value or undefined if there was no value\n */\n decodeReturnValue<TSignature extends PoolNonVoidMethodSignatures>(\n method: TSignature,\n returnValue: ABIReturn | undefined\n ) {\n return returnValue !== undefined\n ? getArc56ReturnValue<MethodReturn<TSignature>>(\n returnValue,\n this.appClient.getABIMethod(method),\n APP_SPEC.structs\n )\n : undefined;\n }\n\n /**\n * Returns a new `PoolClient` client, resolving the app by creator address and name\n * using AlgoKit app deployment semantics (i.e. looking for the app creation transaction note).\n * @param params The parameters to create the app client\n */\n public static async fromCreatorAndName(\n params: Omit<ResolveAppClientByCreatorAndName, \"appSpec\">\n ): Promise<PoolClient> {\n return new PoolClient(await _AppClient.fromCreatorAndName({ ...params, appSpec: APP_SPEC }));\n }\n\n /**\n * Returns an `PoolClient` instance for the current network based on\n * pre-determined network-specific app IDs specified in the ARC-56 app spec.\n *\n * If no IDs are in the app spec or the network isn't recognised, an error is thrown.\n * @param params The parameters to create the app client\n */\n static async fromNetwork(params: Omit<ResolveAppClientByNetwork, \"appSpec\">): Promise<PoolClient> {\n return new PoolClient(await _AppClient.fromNetwork({ ...params, appSpec: APP_SPEC }));\n }\n\n /** The ID of the app instance this client is linked to. */\n public get appId() {\n return this.appClient.appId;\n }\n\n /** The app address of the app instance this client is linked to. */\n public get appAddress() {\n return this.appClient.appAddress;\n }\n\n /** The name of the app. */\n public get appName() {\n return this.appClient.appName;\n }\n\n /** The ARC-56 app spec being used */\n public get appSpec() {\n return this.appClient.appSpec;\n }\n\n /** A reference to the underlying `AlgorandClient` this app client is using. */\n public get algorand(): AlgorandClient {\n return this.appClient.algorand;\n }\n\n /**\n * Get parameters to create transactions for the current app. A good mental model for this is that these parameters represent a deferred transaction creation.\n */\n readonly params = {\n /**\n * Gets available optIn methods\n */\n optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `optInToApplication()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn params\n */\n optInToApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n > = { args: [] }\n ) => {\n return this.appClient.params.optIn(PoolParamsFactory.optIn.optInToApplication(params));\n },\n\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `deposit(axfer,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn params\n */\n deposit: (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n >\n ) => {\n return this.appClient.params.optIn(PoolParamsFactory.optIn.deposit(params));\n },\n },\n\n /**\n * Gets available closeOut methods\n */\n closeOut: {\n /**\n * Makes a close out call to an existing instance of the Pool smart contract using the `closeOutOfApplication(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The closeOut params\n */\n closeOutOfApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"] | PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"]\n > = { args: [undefined] }\n ) => {\n return this.appClient.params.closeOut(PoolParamsFactory.closeOut.closeOutOfApplication(params));\n },\n },\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.params.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Pool smart contract using the `optInAsset()void` ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n optInAsset: (\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.optInAsset(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `deposit(axfer,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n deposit: (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC | OnApplicationComplete.OptInOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.deposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `withdraw(uint64,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n withdraw: (\n params: CallParams<\n PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.withdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapToVUsd(address,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params: returns the difference between the old and the new value of vUsdBalance\n */\n swapToVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.swapToVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapFromVUsd(address,uint64,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params: returns the difference between the old and the new value of vUsdBalance\n */\n swapFromVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.swapFromVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setFeeShare: (\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `adjustTotalLpAmount()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n adjustTotalLpAmount: (\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.adjustTotalLpAmount(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setBalanceRatioMinBP(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setBalanceRatioMinBp: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setBalanceRatioMinBp(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n stopDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.stopDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n startDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.startDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n stopWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.stopWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n startWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.startWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setStopAuthority(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setStopAuthority: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setStopAuthority(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setRouter(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setRouter: (\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setRouter(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimRewards()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n claimRewards: (\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.claimRewards(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setAdminFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n setAdminFeeShare: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.setAdminFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimAdminFee()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n claimAdminFee: (\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.claimAdminFee(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `pendingReward(address)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n pendingReward: (\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.pendingReward(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `transferOwnership(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call params\n */\n transferOwnership: (\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.params.call(PoolParamsFactory.transferOwnership(params));\n },\n };\n\n /**\n * Create transactions for the current app\n */\n readonly createTransaction = {\n /**\n * Gets available optIn methods\n */\n optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `optInToApplication()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn transaction\n */\n optInToApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n > = { args: [] }\n ) => {\n return this.appClient.createTransaction.optIn(PoolParamsFactory.optIn.optInToApplication(params));\n },\n\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `deposit(axfer,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn transaction\n */\n deposit: (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n >\n ) => {\n return this.appClient.createTransaction.optIn(PoolParamsFactory.optIn.deposit(params));\n },\n },\n\n /**\n * Gets available closeOut methods\n */\n closeOut: {\n /**\n * Makes a close out call to an existing instance of the Pool smart contract using the `closeOutOfApplication(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The closeOut transaction\n */\n closeOutOfApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"] | PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"]\n > = { args: [undefined] }\n ) => {\n return this.appClient.createTransaction.closeOut(PoolParamsFactory.closeOut.closeOutOfApplication(params));\n },\n },\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams>) => {\n return this.appClient.createTransaction.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Pool smart contract using the `optInAsset()void` ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n optInAsset: (\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.optInAsset(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `deposit(axfer,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n deposit: (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC | OnApplicationComplete.OptInOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.deposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `withdraw(uint64,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n withdraw: (\n params: CallParams<\n PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.withdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapToVUsd(address,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: returns the difference between the old and the new value of vUsdBalance\n */\n swapToVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.swapToVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapFromVUsd(address,uint64,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction: returns the difference between the old and the new value of vUsdBalance\n */\n swapFromVUsd: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.swapFromVUsd(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setFeeShare: (\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `adjustTotalLpAmount()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n adjustTotalLpAmount: (\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.adjustTotalLpAmount(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setBalanceRatioMinBP(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setBalanceRatioMinBp: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setBalanceRatioMinBp(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n stopDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.stopDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n startDeposit: (\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.startDeposit(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n stopWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.stopWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n startWithdraw: (\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.startWithdraw(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setStopAuthority(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setStopAuthority: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setStopAuthority(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setRouter(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setRouter: (\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setRouter(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimRewards()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n claimRewards: (\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.claimRewards(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setAdminFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n setAdminFeeShare: (\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.setAdminFeeShare(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimAdminFee()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n claimAdminFee: (\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n } = { args: [] }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.claimAdminFee(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `pendingReward(address)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n pendingReward: (\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.pendingReward(params));\n },\n\n /**\n * Makes a call to the Pool smart contract using the `transferOwnership(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call transaction\n */\n transferOwnership: (\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n return this.appClient.createTransaction.call(PoolParamsFactory.transferOwnership(params));\n },\n };\n\n /**\n * Send calls to the current app\n */\n readonly send = {\n /**\n * Gets available optIn methods\n */\n optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `optInToApplication()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn result\n */\n optInToApplication: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n > &\n SendParams = { args: [] }\n ) => {\n const result = await this.appClient.send.optIn(PoolParamsFactory.optIn.optInToApplication(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"optInToApplication()void\"] };\n },\n\n /**\n * Opts the user into an existing instance of the Pool smart contract using the `deposit(axfer,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The optIn result\n */\n deposit: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n > &\n SendParams\n ) => {\n const result = await this.appClient.send.optIn(PoolParamsFactory.optIn.deposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"deposit(axfer,uint64)void\"] };\n },\n },\n\n /**\n * Gets available closeOut methods\n */\n closeOut: {\n /**\n * Makes a close out call to an existing instance of the Pool smart contract using the `closeOutOfApplication(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The closeOut result\n */\n closeOutOfApplication: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"] | PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"]\n > &\n SendParams = { args: [undefined] }\n ) => {\n const result = await this.appClient.send.closeOut(PoolParamsFactory.closeOut.closeOutOfApplication(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"closeOutOfApplication(uint64)void\"],\n };\n },\n },\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param params The params for the bare (raw) call\n * @returns The clearState result\n */\n clearState: (params?: Expand<AppClientBareCallParams & SendParams>) => {\n return this.appClient.send.bare.clearState(params);\n },\n\n /**\n * Makes a call to the Pool smart contract using the `optInAsset()void` ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n optInAsset: async (\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.optInAsset(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"optInAsset()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `deposit(axfer,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n deposit: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC | OnApplicationComplete.OptInOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.deposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"deposit(axfer,uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `withdraw(uint64,uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n withdraw: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.withdraw(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"withdraw(uint64,uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapToVUsd(address,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result: returns the difference between the old and the new value of vUsdBalance\n */\n swapToVUsd: async (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.swapToVUsd(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"swapToVUsd(address,uint64,bool)uint64\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `swapFromVUsd(address,uint64,uint64,bool)uint64` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result: returns the difference between the old and the new value of vUsdBalance\n */\n swapFromVUsd: async (\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.swapFromVUsd(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"swapFromVUsd(address,uint64,uint64,bool)uint64\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setFeeShare: async (\n params: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setFeeShare(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"setFeeShare(uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `adjustTotalLpAmount()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n adjustTotalLpAmount: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.adjustTotalLpAmount(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"adjustTotalLpAmount()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setBalanceRatioMinBP(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setBalanceRatioMinBp: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setBalanceRatioMinBp(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"setBalanceRatioMinBP(uint64)void\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n stopDeposit: async (\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.stopDeposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"stopDeposit()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startDeposit()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n startDeposit: async (\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.startDeposit(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"startDeposit()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `stopWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n stopWithdraw: async (\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.stopWithdraw(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"stopWithdraw()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `startWithdraw()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n startWithdraw: async (\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.startWithdraw(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"startWithdraw()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setStopAuthority(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setStopAuthority: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setStopAuthority(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"setStopAuthority(address)void\"],\n };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setRouter(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setRouter: async (\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setRouter(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"setRouter(address)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimRewards()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n claimRewards: async (\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.claimRewards(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"claimRewards()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `setAdminFeeShare(uint64)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n setAdminFeeShare: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.setAdminFeeShare(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"setAdminFeeShare(uint64)void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `claimAdminFee()void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n claimAdminFee: async (\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC } = { args: [] }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.claimAdminFee(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"claimAdminFee()void\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `pendingReward(address)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n pendingReward: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.pendingReward(params));\n return { ...result, return: result.return as unknown as undefined | PoolReturns[\"pendingReward(address)uint64\"] };\n },\n\n /**\n * Makes a call to the Pool smart contract using the `transferOwnership(address)void` ABI method.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n transferOwnership: async (\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > &\n SendParams & { onComplete?: OnApplicationComplete.NoOpOC }\n ) => {\n const result = await this.appClient.send.call(PoolParamsFactory.transferOwnership(params));\n return {\n ...result,\n return: result.return as unknown as undefined | PoolReturns[\"transferOwnership(address)void\"],\n };\n },\n };\n\n /**\n * Clone this app client with different params\n *\n * @param params The params to use for the the cloned app client. Omit a param to keep the original value. Set a param to override the original value. Setting to undefined will clear the original value.\n * @returns A new app client with the altered params\n */\n public clone(params: CloneAppClientParams) {\n return new PoolClient(this.appClient.clone(params));\n }\n\n /**\n * Makes a readonly (simulated) call to the Pool smart contract using the `pendingReward(address)uint64` ABI method.\n *\n * This method is a readonly method; calling it with onComplete of NoOp will result in a simulated transaction rather than a real transaction.\n *\n * @param params The params for the smart contract call\n * @returns The call result\n */\n async pendingReward(\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n >\n ) {\n const result = await this.appClient.send.call(PoolParamsFactory.pendingReward(params));\n return result.return as unknown as PoolReturns[\"pendingReward(address)uint64\"];\n }\n\n /**\n * Methods to access state for the current Pool app\n */\n state = {\n /**\n * Methods to access global state for the current Pool app\n */\n global: {\n /**\n * Get all current keyed values from global state\n */\n getAll: async (): Promise<Partial<Expand<GlobalKeysState>>> => {\n const result = await this.appClient.state.global.getAll();\n return {\n feeShareBp: result.feeShareBP,\n router: result.router,\n tokenBalance: result.tokenBalance,\n vUsdBalance: result.vUsdBalance,\n balanceRatioMinBp: result.balanceRatioMinBP,\n reserves: result.reserves,\n a: result.a,\n d: result.d,\n tokenAmountReduce: result.tokenAmountReduce,\n tokenAmountIncrease: result.tokenAmountIncrease,\n stopAuthority: result.stopAuthority,\n canDeposit: result.canDeposit,\n canWithdraw: result.canWithdraw,\n asset: result.asset,\n adminFeeShareBp: result.adminFeeShareBP,\n totalSupply: result.totalSupply,\n accRewardPerShareP: new BinaryStateValue(result.accRewardPerShareP),\n adminFeeAmount: result.adminFeeAmount,\n owner: result.owner,\n };\n },\n /**\n * Get the current value of the feeShareBP key in global state\n */\n feeShareBp: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"feeShareBP\")) as bigint | undefined;\n },\n /**\n * Get the current value of the router key in global state\n */\n router: async (): Promise<string | undefined> => {\n return (await this.appClient.state.global.getValue(\"router\")) as string | undefined;\n },\n /**\n * Get the current value of the tokenBalance key in global state\n */\n tokenBalance: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"tokenBalance\")) as bigint | undefined;\n },\n /**\n * Get the current value of the vUsdBalance key in global state\n */\n vUsdBalance: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"vUsdBalance\")) as bigint | undefined;\n },\n /**\n * Get the current value of the balanceRatioMinBP key in global state\n */\n balanceRatioMinBp: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"balanceRatioMinBP\")) as bigint | undefined;\n },\n /**\n * Get the current value of the reserves key in global state\n */\n reserves: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"reserves\")) as bigint | undefined;\n },\n /**\n * Get the current value of the a key in global state\n */\n a: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"a\")) as bigint | undefined;\n },\n /**\n * Get the current value of the d key in global state\n */\n d: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"d\")) as bigint | undefined;\n },\n /**\n * Get the current value of the tokenAmountReduce key in global state\n */\n tokenAmountReduce: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"tokenAmountReduce\")) as bigint | undefined;\n },\n /**\n * Get the current value of the tokenAmountIncrease key in global state\n */\n tokenAmountIncrease: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"tokenAmountIncrease\")) as bigint | undefined;\n },\n /**\n * Get the current value of the stopAuthority key in global state\n */\n stopAuthority: async (): Promise<string | undefined> => {\n return (await this.appClient.state.global.getValue(\"stopAuthority\")) as string | undefined;\n },\n /**\n * Get the current value of the canDeposit key in global state\n */\n canDeposit: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"canDeposit\")) as bigint | undefined;\n },\n /**\n * Get the current value of the canWithdraw key in global state\n */\n canWithdraw: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"canWithdraw\")) as bigint | undefined;\n },\n /**\n * Get the current value of the asset key in global state\n */\n asset: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"asset\")) as bigint | undefined;\n },\n /**\n * Get the current value of the adminFeeShareBP key in global state\n */\n adminFeeShareBp: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"adminFeeShareBP\")) as bigint | undefined;\n },\n /**\n * Get the current value of the totalSupply key in global state\n */\n totalSupply: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"totalSupply\")) as bigint | undefined;\n },\n /**\n * Get the current value of the accRewardPerShareP key in global state\n */\n accRewardPerShareP: async (): Promise<BinaryState> => {\n return new BinaryStateValue(\n (await this.appClient.state.global.getValue(\"accRewardPerShareP\")) as Uint8Array | undefined\n );\n },\n /**\n * Get the current value of the adminFeeAmount key in global state\n */\n adminFeeAmount: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.global.getValue(\"adminFeeAmount\")) as bigint | undefined;\n },\n /**\n * Get the current value of the owner key in global state\n */\n owner: async (): Promise<string | undefined> => {\n return (await this.appClient.state.global.getValue(\"owner\")) as string | undefined;\n },\n },\n /**\n * Methods to access local state for the current Pool app\n */\n local: (address: string | Address) => {\n const encodedAddress = typeof address === \"string\" ? address : encodeAddress(address.publicKey);\n return {\n /**\n * Get all current keyed values from local state\n */\n getAll: async (): Promise<Partial<Expand<LocalKeysState>>> => {\n const result = await this.appClient.state.local(encodedAddress).getAll();\n return {\n balance: result.balance,\n userRewardDebt: result.userRewardDebt,\n };\n },\n /**\n * Get the current value of the balance key in local state\n */\n balance: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.local(encodedAddress).getValue(\"balance\")) as bigint | undefined;\n },\n /**\n * Get the current value of the userRewardDebt key in local state\n */\n userRewardDebt: async (): Promise<bigint | undefined> => {\n return (await this.appClient.state.local(encodedAddress).getValue(\"userRewardDebt\")) as bigint | undefined;\n },\n };\n },\n };\n\n public newGroup(): PoolComposer {\n const client = this;\n const composer = this.algorand.newGroup();\n let promiseChain: Promise<unknown> = Promise.resolve();\n const resultMappers: Array<undefined | ((x: ABIReturn | undefined) => any)> = [];\n return {\n /**\n * Add a optInAsset()void method call against the Pool contract\n */\n optInAsset(\n params: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.optInAsset(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a deposit(axfer,uint64)void method call against the Pool contract\n */\n deposit(\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC | OnApplicationComplete.OptInOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.deposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a withdraw(uint64,uint64)void method call against the Pool contract\n */\n withdraw(\n params: CallParams<\n PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.withdraw(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a swapToVUsd(address,uint64,bool)uint64 method call against the Pool contract\n */\n swapToVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.swapToVUsd(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"swapToVUsd(address,uint64,bool)uint64\", v));\n return this;\n },\n /**\n * Add a swapFromVUsd(address,uint64,uint64,bool)uint64 method call against the Pool contract\n */\n swapFromVUsd(\n params: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.swapFromVUsd(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"swapFromVUsd(address,uint64,uint64,bool)uint64\", v));\n return this;\n },\n /**\n * Add a setFeeShare(uint64)void method call against the Pool contract\n */\n setFeeShare(\n params: CallParams<\n PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setFeeShare(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a adjustTotalLpAmount()void method call against the Pool contract\n */\n adjustTotalLpAmount(\n params: CallParams<\n PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.adjustTotalLpAmount(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setBalanceRatioMinBP(uint64)void method call against the Pool contract\n */\n setBalanceRatioMinBp(\n params: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setBalanceRatioMinBp(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a stopDeposit()void method call against the Pool contract\n */\n stopDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.stopDeposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a startDeposit()void method call against the Pool contract\n */\n startDeposit(\n params: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.startDeposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a stopWithdraw()void method call against the Pool contract\n */\n stopWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.stopWithdraw(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a startWithdraw()void method call against the Pool contract\n */\n startWithdraw(\n params: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.startWithdraw(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setStopAuthority(address)void method call against the Pool contract\n */\n setStopAuthority(\n params: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setStopAuthority(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setRouter(address)void method call against the Pool contract\n */\n setRouter(\n params: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setRouter(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a claimRewards()void method call against the Pool contract\n */\n claimRewards(\n params: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.claimRewards(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a setAdminFeeShare(uint64)void method call against the Pool contract\n */\n setAdminFeeShare(\n params: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.setAdminFeeShare(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a claimAdminFee()void method call against the Pool contract\n */\n claimAdminFee(\n params: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]> & {\n onComplete?: OnApplicationComplete.NoOpOC;\n }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.claimAdminFee(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n /**\n * Add a pendingReward(address)uint64 method call against the Pool contract\n */\n pendingReward(\n params: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.pendingReward(params))\n );\n resultMappers.push((v) => client.decodeReturnValue(\"pendingReward(address)uint64\", v));\n return this;\n },\n /**\n * Add a transferOwnership(address)void method call against the Pool contract\n */\n transferOwnership(\n params: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n > & { onComplete?: OnApplicationComplete.NoOpOC }\n ) {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.transferOwnership(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n get optIn() {\n return {\n optInToApplication: (\n params: CallParams<\n PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]\n >\n ) => {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.optIn.optInToApplication(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n deposit: (\n params: CallParams<\n PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]\n >\n ) => {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.optIn.deposit(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n };\n },\n get closeOut() {\n return {\n closeOutOfApplication: (\n params: CallParams<\n | PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"]\n | PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"]\n >\n ) => {\n promiseChain = promiseChain.then(async () =>\n composer.addAppCallMethodCall(await client.params.closeOut.closeOutOfApplication(params))\n );\n resultMappers.push(undefined);\n return this;\n },\n };\n },\n /**\n * Add a clear state call to the Pool contract\n */\n clearState(params: AppClientBareCallParams) {\n promiseChain = promiseChain.then(() => composer.addAppCall(client.params.clearState(params)));\n return this;\n },\n addTransaction(txn: Transaction, signer?: TransactionSigner) {\n promiseChain = promiseChain.then(() => composer.addTransaction(txn, signer));\n return this;\n },\n async composer() {\n await promiseChain;\n return composer;\n },\n async simulate(options?: SimulateOptions) {\n await promiseChain;\n const result = await (!options ? composer.simulate() : composer.simulate(options));\n return {\n ...result,\n returns: result.returns?.map((val, i) =>\n resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue\n ),\n };\n },\n async send(params?: SendParams) {\n await promiseChain;\n const result = await composer.send(params);\n return {\n ...result,\n returns: result.returns?.map((val, i) =>\n resultMappers[i] !== undefined ? resultMappers[i]!(val) : val.returnValue\n ),\n };\n },\n } as unknown as PoolComposer;\n }\n}\nexport type PoolComposer<TReturns extends [...any[]] = []> = {\n /**\n * Calls the optInAsset()void ABI method.\n *\n * Opt-in the application account to the ASA stored in `this.asset`.\n This performs an inner axfer of 0 to the app's own address.\n Call once after deploy (or whenever you change the asset).\n\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optInAsset(\n params?: CallParams<PoolArgs[\"obj\"][\"optInAsset()void\"] | PoolArgs[\"tuple\"][\"optInAsset()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"optInAsset()void\"] | undefined]>;\n\n /**\n * Calls the deposit(axfer,uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deposit(\n params?: CallParams<PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"deposit(axfer,uint64)void\"] | undefined]>;\n\n /**\n * Calls the withdraw(uint64,uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n withdraw(\n params?: CallParams<\n PoolArgs[\"obj\"][\"withdraw(uint64,uint64)void\"] | PoolArgs[\"tuple\"][\"withdraw(uint64,uint64)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"withdraw(uint64,uint64)void\"] | undefined]>;\n\n /**\n * Calls the swapToVUsd(address,uint64,bool)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n swapToVUsd(\n params?: CallParams<\n | PoolArgs[\"obj\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapToVUsd(address,uint64,bool)uint64\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"swapToVUsd(address,uint64,bool)uint64\"] | undefined]>;\n\n /**\n * Calls the swapFromVUsd(address,uint64,uint64,bool)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n swapFromVUsd(\n params?: CallParams<\n | PoolArgs[\"obj\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n | PoolArgs[\"tuple\"][\"swapFromVUsd(address,uint64,uint64,bool)uint64\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"swapFromVUsd(address,uint64,uint64,bool)uint64\"] | undefined]>;\n\n /**\n * Calls the setFeeShare(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setFeeShare(\n params?: CallParams<PoolArgs[\"obj\"][\"setFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setFeeShare(uint64)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"setFeeShare(uint64)void\"] | undefined]>;\n\n /**\n * Calls the adjustTotalLpAmount()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n adjustTotalLpAmount(\n params?: CallParams<PoolArgs[\"obj\"][\"adjustTotalLpAmount()void\"] | PoolArgs[\"tuple\"][\"adjustTotalLpAmount()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"adjustTotalLpAmount()void\"] | undefined]>;\n\n /**\n * Calls the setBalanceRatioMinBP(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setBalanceRatioMinBp(\n params?: CallParams<\n PoolArgs[\"obj\"][\"setBalanceRatioMinBP(uint64)void\"] | PoolArgs[\"tuple\"][\"setBalanceRatioMinBP(uint64)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"setBalanceRatioMinBP(uint64)void\"] | undefined]>;\n\n /**\n * Calls the stopDeposit()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n stopDeposit(\n params?: CallParams<PoolArgs[\"obj\"][\"stopDeposit()void\"] | PoolArgs[\"tuple\"][\"stopDeposit()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"stopDeposit()void\"] | undefined]>;\n\n /**\n * Calls the startDeposit()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n startDeposit(\n params?: CallParams<PoolArgs[\"obj\"][\"startDeposit()void\"] | PoolArgs[\"tuple\"][\"startDeposit()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"startDeposit()void\"] | undefined]>;\n\n /**\n * Calls the stopWithdraw()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n stopWithdraw(\n params?: CallParams<PoolArgs[\"obj\"][\"stopWithdraw()void\"] | PoolArgs[\"tuple\"][\"stopWithdraw()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"stopWithdraw()void\"] | undefined]>;\n\n /**\n * Calls the startWithdraw()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n startWithdraw(\n params?: CallParams<PoolArgs[\"obj\"][\"startWithdraw()void\"] | PoolArgs[\"tuple\"][\"startWithdraw()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"startWithdraw()void\"] | undefined]>;\n\n /**\n * Calls the setStopAuthority(address)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setStopAuthority(\n params?: CallParams<\n PoolArgs[\"obj\"][\"setStopAuthority(address)void\"] | PoolArgs[\"tuple\"][\"setStopAuthority(address)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"setStopAuthority(address)void\"] | undefined]>;\n\n /**\n * Calls the setRouter(address)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setRouter(\n params?: CallParams<PoolArgs[\"obj\"][\"setRouter(address)void\"] | PoolArgs[\"tuple\"][\"setRouter(address)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"setRouter(address)void\"] | undefined]>;\n\n /**\n * Calls the claimRewards()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claimRewards(\n params?: CallParams<PoolArgs[\"obj\"][\"claimRewards()void\"] | PoolArgs[\"tuple\"][\"claimRewards()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"claimRewards()void\"] | undefined]>;\n\n /**\n * Calls the setAdminFeeShare(uint64)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n setAdminFeeShare(\n params?: CallParams<\n PoolArgs[\"obj\"][\"setAdminFeeShare(uint64)void\"] | PoolArgs[\"tuple\"][\"setAdminFeeShare(uint64)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"setAdminFeeShare(uint64)void\"] | undefined]>;\n\n /**\n * Calls the claimAdminFee()void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n claimAdminFee(\n params?: CallParams<PoolArgs[\"obj\"][\"claimAdminFee()void\"] | PoolArgs[\"tuple\"][\"claimAdminFee()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"claimAdminFee()void\"] | undefined]>;\n\n /**\n * Calls the pendingReward(address)uint64 ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n pendingReward(\n params?: CallParams<\n PoolArgs[\"obj\"][\"pendingReward(address)uint64\"] | PoolArgs[\"tuple\"][\"pendingReward(address)uint64\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"pendingReward(address)uint64\"] | undefined]>;\n\n /**\n * Calls the transferOwnership(address)void ABI method.\n *\n * @param args The arguments for the contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n transferOwnership(\n params?: CallParams<\n PoolArgs[\"obj\"][\"transferOwnership(address)void\"] | PoolArgs[\"tuple\"][\"transferOwnership(address)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"transferOwnership(address)void\"] | undefined]>;\n\n /**\n * Gets available optIn methods\n */\n readonly optIn: {\n /**\n * Opts the user into an existing instance of the Pool smart contract using the optInToApplication()void ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n optInToApplication(\n params?: CallParams<PoolArgs[\"obj\"][\"optInToApplication()void\"] | PoolArgs[\"tuple\"][\"optInToApplication()void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"optInToApplication()void\"] | undefined]>;\n /**\n * Opts the user into an existing instance of the Pool smart contract using the deposit(axfer,uint64)void ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n deposit(\n params?: CallParams<PoolArgs[\"obj\"][\"deposit(axfer,uint64)void\"] | PoolArgs[\"tuple\"][\"deposit(axfer,uint64)void\"]>\n ): PoolComposer<[...TReturns, PoolReturns[\"deposit(axfer,uint64)void\"] | undefined]>;\n };\n\n /**\n * Gets available closeOut methods\n */\n readonly closeOut: {\n /**\n * Makes a close out call to an existing instance of the Pool smart contract using the closeOutOfApplication(uint64)void ABI method.\n *\n * @param args The arguments for the smart contract call\n * @param params Any additional parameters for the call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n closeOutOfApplication(\n params?: CallParams<\n PoolArgs[\"obj\"][\"closeOutOfApplication(uint64)void\"] | PoolArgs[\"tuple\"][\"closeOutOfApplication(uint64)void\"]\n >\n ): PoolComposer<[...TReturns, PoolReturns[\"closeOutOfApplication(uint64)void\"] | undefined]>;\n };\n\n /**\n * Makes a clear_state call to an existing instance of the Pool smart contract.\n *\n * @param args The arguments for the bare call\n * @returns The typed transaction composer so you can fluently chain multiple calls or call execute to execute all queued up transactions\n */\n clearState(params?: AppClientBareCallParams): PoolComposer<[...TReturns, undefined]>;\n\n /**\n * Adds a transaction to the composer\n *\n * @param txn A transaction to add to the transaction group\n * @param signer The optional signer to use when signing this transaction.\n */\n addTransaction(txn: Transaction, signer?: TransactionSigner): PoolComposer<TReturns>;\n /**\n * Returns the underlying AtomicTransactionComposer instance\n */\n composer(): Promise<TransactionComposer>;\n /**\n * Simulates the transaction group and returns the result\n */\n simulate(): Promise<PoolComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>;\n simulate(\n options: SkipSignaturesSimulateOptions\n ): Promise<PoolComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>;\n simulate(\n options: RawSimulateOptions\n ): Promise<PoolComposerResults<TReturns> & { simulateResponse: modelsv2.SimulateResponse }>;\n /**\n * Sends the transaction group to the network and returns the results\n */\n send(params?: SendParams): Promise<PoolComposerResults<TReturns>>;\n};\nexport type PoolComposerResults<TReturns extends [...any[]]> = Expand<\n SendAtomicTransactionComposerResults & {\n returns: TReturns;\n }\n>;\n"]}