@shipload/sdk 1.0.0-next.51 → 1.0.0-next.52

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 (58) hide show
  1. package/lib/shipload.d.ts +470 -157
  2. package/lib/shipload.js +2309 -492
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +2279 -491
  5. package/lib/shipload.m.js.map +1 -1
  6. package/lib/testing.d.ts +123 -8
  7. package/lib/testing.js +450 -19
  8. package/lib/testing.js.map +1 -1
  9. package/lib/testing.m.js +451 -20
  10. package/lib/testing.m.js.map +1 -1
  11. package/package.json +1 -1
  12. package/src/capabilities/crafting.ts +10 -1
  13. package/src/capabilities/gathering.ts +1 -1
  14. package/src/capabilities/hauling.ts +0 -5
  15. package/src/capabilities/modules.ts +6 -0
  16. package/src/capabilities/movement.ts +1 -1
  17. package/src/contracts/server.ts +293 -13
  18. package/src/data/capabilities.ts +11 -2
  19. package/src/data/entities.json +235 -20
  20. package/src/data/item-ids.ts +10 -0
  21. package/src/data/items.json +61 -0
  22. package/src/data/kind-registry.json +53 -1
  23. package/src/data/kind-registry.ts +5 -0
  24. package/src/data/metadata.ts +74 -5
  25. package/src/data/recipes-runtime.ts +1 -0
  26. package/src/data/recipes.json +887 -118
  27. package/src/derivation/capabilities.test.ts +81 -4
  28. package/src/derivation/capabilities.ts +162 -57
  29. package/src/derivation/crafting.ts +2 -0
  30. package/src/derivation/recipe-usage.test.ts +10 -7
  31. package/src/derivation/rollups.ts +16 -0
  32. package/src/derivation/stat-scaling.ts +12 -0
  33. package/src/entities/makers.ts +10 -1
  34. package/src/index-module.ts +29 -3
  35. package/src/managers/actions.ts +77 -46
  36. package/src/managers/construction-types.ts +2 -2
  37. package/src/managers/construction.ts +15 -15
  38. package/src/managers/plot.ts +1 -1
  39. package/src/nft/buildImmutableData.ts +55 -9
  40. package/src/nft/description.ts +99 -36
  41. package/src/planner/planner.test.ts +50 -41
  42. package/src/resolution/resolve-item.test.ts +1 -1
  43. package/src/resolution/resolve-item.ts +26 -11
  44. package/src/scheduling/availability.ts +7 -6
  45. package/src/scheduling/cancel.test.ts +40 -6
  46. package/src/scheduling/cancel.ts +21 -29
  47. package/src/scheduling/jobs.ts +71 -0
  48. package/src/scheduling/lanes.ts +29 -0
  49. package/src/scheduling/projection.ts +42 -25
  50. package/src/scheduling/task-cargo.ts +1 -1
  51. package/src/testing/projection-parity.ts +2 -2
  52. package/src/travel/reach.ts +4 -6
  53. package/src/travel/route-planner.ts +60 -49
  54. package/src/travel/route-simulator.ts +3 -7
  55. package/src/travel/travel.ts +14 -5
  56. package/src/types/capabilities.ts +9 -3
  57. package/src/types.ts +5 -3
  58. package/src/managers/flatten-gather-plan.test.ts +0 -80
package/lib/shipload.m.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from 'tslib';
2
- import { Blob, ABI, Struct, Name, Asset, UInt64, Checksum256, UInt32, TimePointSec, ExtendedAsset, UInt16, UInt8, Int64, TimePoint, Int8, BlockTimestamp, Bytes, Int32, Checksum512, PermissionLevel, Action, Transaction, APIClient, Serializer } from '@wharfkit/antelope';
2
+ import { Blob, ABI, Struct, Name, Asset, UInt64, Checksum256, UInt32, TimePointSec, ExtendedAsset, UInt16, UInt8, Int64, TimePoint, Int8, Bytes, BlockTimestamp, Int32, Checksum512, PermissionLevel, Action, APIClient, Serializer } from '@wharfkit/antelope';
3
3
  import ContractKit, { Contract as Contract$2 } from '@wharfkit/contract';
4
4
 
5
5
  const abiBlob$1 = Blob.from('DmVvc2lvOjphYmkvMS4yAB0LYmFsYW5jZV9yb3cAAg50b2tlbl9jb250cmFjdARuYW1lB2JhbGFuY2UFYXNzZXQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BWNsb3NlAAMFb3duZXIEbmFtZQ50b2tlbl9jb250cmFjdARuYW1lDHRva2VuX3N5bWJvbAZzeW1ib2wLY29tcGFueV9yb3cAAgdhY2NvdW50BG5hbWUEbmFtZQZzdHJpbmcMZGViaXRkZXBvc2l0AAUFb3duZXIEbmFtZQV0b2tlbgRuYW1lBmxvY2tlZAVhc3NldAtmZWVfYWNjb3VudARuYW1lA2ZlZQVhc3NldA5kZXBvc2l0Y2ZnX3JvdwACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAZlbmFibGUAAQdlbmFibGVkBGJvb2wKZW5hYmxlZ2FtZQACCGNvbnRyYWN0BG5hbWUHZW5hYmxlZARib29sDGZvdW5kY29tcGFueQACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwtnYW1lX2NvbmZpZwAEBHNlZWQLY2hlY2tzdW0yNTYJZXBvY2h0aW1lBnVpbnQzMgVzdGFydA50aW1lX3BvaW50X3NlYwNlbmQOdGltZV9wb2ludF9zZWMJZ2FtZV9tZXRhAAQEbmFtZQZzdHJpbmcLZGVzY3JpcHRpb24Gc3RyaW5nA3VybAZzdHJpbmcHdmVyc2lvbgZzdHJpbmcIZ2FtZV9yb3cABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCmdhbWVfc3RhdGUAAQdlbmFibGVkBGJvb2wEb3BlbgADBW93bmVyBG5hbWUOdG9rZW5fY29udHJhY3QEbmFtZQx0b2tlbl9zeW1ib2wGc3ltYm9sDHJlbGdhdGVhc3NldAABCGFzc2V0X2lkBnVpbnQ2NAxyZWxnYXRlb3duZXIAAQVvd25lcgRuYW1lDHNldGVwb2NodGltZQACCGNvbnRyYWN0BG5hbWUJZXBvY2h0aW1lBnVpbnQzMghzZXR0b2tlbgACDnRva2VuX2NvbnRyYWN0BG5hbWUMdG9rZW5fc3ltYm9sBnN5bWJvbAlzdGFydGdhbWUABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCXN0YXRlX3JvdwABB2VuYWJsZWQEYm9vbAt1bndyYXBjYXJnbwADBGdhbWUEbmFtZQVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA51bndyYXBjdXN0X3JvdwACCGFzc2V0X2lkBnVpbnQ2NAVvd25lcgRuYW1lDHVud3JhcGVudGl0eQADBGdhbWUEbmFtZQVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NAp1cGRhdGVnYW1lAAIIY29udHJhY3QEbmFtZQRtZXRhCWdhbWVfbWV0YQR3aXBlAAAId2l0aGRyYXcAAwVvd25lcgRuYW1lCHF1YW50aXR5DmV4dGVuZGVkX2Fzc2V0BG1lbW8Gc3RyaW5nCXdyYXBjYXJnbwAGBGdhbWUEbmFtZQVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0CGNhcmdvX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQKd3JhcGVudGl0eQAEBGdhbWUEbmFtZQVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHdyYXBnYXRlX3JvdwADBW93bmVyBG5hbWUEZ2FtZQRuYW1lDWxhc3RfYXNzZXRfaWQGdWludDY0EwCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAIVpRAVjbG9zZeICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsb3NlCnN1bW1hcnk6ICdDbG9zZSBhIGRlcG9zaXQgYmFsYW5jZSByb3cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpDbG9zZSB0aGUgb3duZXIncyBkZXBvc2l0IGJhbGFuY2Ugcm93IGZvciB0aGUgZ2l2ZW4gdG9rZW4gYW5kIGZyZWUgaXRzIFJBTS4gVGhlIGJhbGFuY2UgbXVzdCBiZSB6ZXJvIGJlZm9yZSBjbG9zaW5nLiBSZXF1aXJlcyB0aGUgb3duZXIncyBhdXRob3JpdHkukB2mVaXsjkoMZGViaXRkZXBvc2l0nQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGViaXRkZXBvc2l0CnN1bW1hcnk6ICdEZWJpdCBhIGRlcG9zaXQgYmFsYW5jZSBmb3IgYSB3cmFwIG9wZXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IGEgcmVnaXN0ZXJlZCwgZW5hYmxlZCBnYW1lIGNvbnRyYWN0IG9ubHkuIERlYml0cyB0aGUgb3duZXIncyBkZXBvc2l0IGJhbGFuY2UgYnkgdGhlIGxvY2tlZCBhbW91bnQgcGx1cyB0aGUgZmVlLCBhbmQgY3JlZGl0cyB0aGUgZmVlIHRvIHRoZSBjb25maWd1cmVkIGZlZSBhY2NvdW50LiBVc2VkIGJ5IGEgZ2FtZSdzIHdyYXAgZmxvdyB0byBjb2xsZWN0IHRoZSB3cmFwIGNvc3QuIENhbm5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgcGxheWVycyBvciB1bnJlZ2lzdGVyZWQgYWNjb3VudHMuAAAAAKh4zFQGZW5hYmxl8wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdFbmFibGUvZGlzYWJsZSBwbGF0Zm9ybScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoZSBwbGF0Zm9ybSBjb250cmFjdC4AgJKGqXjMVAplbmFibGVnYW1l/AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlZ2FtZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2JhYmxlIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC7gp6mSojQ1XQxmb3VuZGNvbXBhbnmDAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3VuZGNvbXBhbnkKc3VtbWFyeTogJ0ZvdW5kIGEgbmV3IGNvbXBhbnknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpGb3VuZCBhIG5ldyBjb21wYW55IGluIHRoZSBTaGlwbG9hZCBwbGF0Zm9ybSBjb250cmFjdC4AAAAAADBVpQRvcGVumwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogb3BlbgpzdW1tYXJ5OiAnT3BlbiBhIGRlcG9zaXQgYmFsYW5jZSByb3cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpPcGVuIGEgemVyby1iYWxhbmNlIGRlcG9zaXQgcm93IGZvciB0aGUgZ2l2ZW4gb3duZXIgYW5kIHRva2VuLCB3aXRoIFJBTSBwYWlkIGJ5IHRoZSBvd25lci4gSGFzIG5vIGVmZmVjdCBpZiB0aGUgcm93IGFscmVhZHkgZXhpc3RzLiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgdGhlIG93bmVyIGNhbiByZWNlaXZlIHRva2VuIGRlcG9zaXRzIG9yIHdyYXAgcmVmdW5kcy6QFcZGZcOiugxyZWxnYXRlYXNzZXQAcNXkVGXDoroMcmVsZ2F0ZW93bmVyAKCkyw3RqrLCDHNldGVwb2NodGltZcQCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldGVwb2NodGltZQpzdW1tYXJ5OiAnREVCVUc6IG92ZXJyaWRlIGEgZ2FtZScncyBlcG9jaCB0aW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpPdmVycmlkZSB0aGUgZXBvY2ggZHVyYXRpb24gaW4gdGhlIGNvbmZpZ3VyYXRpb24gb2YgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LiBSZXF1aXJlcyBwbGF0Zm9ybSBjb250cmFjdCBhdXRob3JpdHkuAAAAU0Gas8IIc2V0dG9rZW6dAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXR0b2tlbgpzdW1tYXJ5OiAnU2V0IHRoZSBhY2NlcHRlZCBkZXBvc2l0IHRva2VuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKQWRtaW4gYWN0aW9uIHRoYXQgc2V0cyB0aGUgYWNjZXB0ZWQgZGVwb3NpdCB0b2tlbiAoY29udHJhY3QgYWNjb3VudCBhbmQgc3ltYm9sKSBmb3IgdGhlIHBsYXRmb3JtLiBBbGwgcGxheWVyIGRlcG9zaXRzIGFuZCB3cmFwIGNvc3RzIGFyZSBkZW5vbWluYXRlZCBpbiB0aGlzIHRva2VuLiBSZXF1aXJlcyBwbGF0Zm9ybSBjb250cmFjdCBhdXRob3JpdHkuAABQ0rB8TcYJc3RhcnRnYW1l/wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3RhcnRnYW1lCnN1bW1hcnk6ICdTdGFydCBhIG5ldyBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKU3RhcnQgYSBuZXcgZ2FtZSBvZiBTaGlwbG9hZCBkZXBsb3llZCB0byBhIG5ldyBjb250cmFjdC4AKLsGVXP51At1bndyYXBjYXJnb88ELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVud3JhcGNhcmdvCnN1bW1hcnk6ICdEZXBvc2l0IGFuIE5GVCBpbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlcG9zaXQgYW4gQXRvbWljQXNzZXRzIE5GVCBpbnRvIGEgaG9zdCBlbnRpdHkncyBjYXJnby4gUGFpcnMgd2l0aCBhbiBhdG9taWNhc3NldHM6OnRyYW5zZmVyIGNhcnJ5aW5nIHRoZSAndW53cmFwJyBtZW1vIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiBUaGUgY2FsbGVyIG11c3Qgb3duIHRoZSBob3N0LCB0aGUgaG9zdCBtdXN0IGhhdmUgbG9hZGVycywgYW5kIHRoZSBob3N0IG11c3QgaGF2ZSBjYXBhY2l0eSBoZWFkcm9vbSBmb3IgdGhlIHVud3JhcHBlZCBtYXNzLiBTY2hlZHVsZXMgYSBUQVNLX1VOV1JBUCBvbiB0aGUgaG9zdCB0aGF0LCBvbiByZXNvbHV0aW9uLCBwbGFjZXMgdGhlIGRlY29kZWQgaXRlbSBpbnRvIHRoZSBob3N0J3MgY2FyZ28gYW5kIGJ1cm5zIHRoZSBORlQu4LPLU1Vz+dQMdW53cmFwZW50aXR54gQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW53cmFwZW50aXR5CnN1bW1hcnk6ICdEZXBsb3kgYW4gZW50aXR5IE5GVCBkaXJlY3RseSB0byBhIG5leHVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpEZXBsb3kgYSBwYWNrZWQtZW50aXR5IEF0b21pY0Fzc2V0cyBORlQgKG9yYml0YWwgdmVzc2VsOiBzaGlwIG9yIGNvbnRhaW5lcikgZGlyZWN0bHkgYXMgYSBsaXZlIGVudGl0eS4gUGFpcnMgd2l0aCBhbiBhdG9taWNhc3NldHM6OnRyYW5zZmVyIGNhcnJ5aW5nIHRoZSAnZGVwbG95JyBtZW1vIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uLiBUaGUgTkZUIGlzIGJ1cm5lZCwgYSBuZXcgZW50aXR5IHJvdyBpcyBlbXBsYWNlZCBhdCB0aGUgTkZUJ3Mgd3JhcCBvcmlnaW4gcGFpZCBieSB0aGUgb3duZXIsIGFuZCBUQVNLX1RSQVZFTCBwbHVzIFRBU0tfUkVDSEFSR0UgYXJlIHF1ZXVlZCB0byBkZWxpdmVyIHRoZSBlbnRpdHkgdG8gdGhlIHRhcmdldCBuZXh1cyBhbmQgYnJpbmcgaXQgdG8gZnVsbCBlbmVyZ3kuAICShqlsUtUKdXBkYXRlZ2FtZY0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWdhbWUKc3VtbWFyeTogJ1VwZGF0ZSBnYW1lIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKVXBkYXRlIHRoZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3QuCgotLS0AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAA3NzUsuMId2l0aGRyYXeXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXRoZHJhdwpzdW1tYXJ5OiAnV2l0aGRyYXcgdG9rZW5zIGZyb20gYSBkZXBvc2l0IGJhbGFuY2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpXaXRoZHJhdyB0b2tlbnMgZnJvbSB0aGUgb3duZXIncyBkZXBvc2l0IGJhbGFuY2UuIERlYml0cyB0aGUgbGVkZ2VyIGJ5IHRoZSByZXF1ZXN0ZWQgYW1vdW50IGFuZCB0cmFuc2ZlcnMgdGhlIHRva2VucyB0byB0aGUgb3duZXIuIFJlcXVpcmVzIGEgc3VmZmljaWVudCBiYWxhbmNlIGFuZCB0aGUgb3duZXIncyBhdXRob3JpdHkuAACg7BpUzeUJd3JhcGNhcmdvAACAzy5PVc3lCndyYXBlbnRpdHm1BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3cmFwZW50aXR5CnN1bW1hcnk6ICdXcmFwIGEgZGVwbG95ZWQgZW50aXR5IGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpXcmFwIGFuIGVudGl0eSBpbnRvIGFuIEF0b21pY0Fzc2V0cyBORlQgbWludGVkIHRvIGl0cyBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGlkbGUgd2l0aCBlbXB0eSBjYXJnbywgYW5kIGhhdmUgYW4gbmZ0Y29uZmlnIG1hcHBpbmcgZm9yIGl0cyBpdGVtIGlkLiBFcmFzZXMgdGhlIGVudGl0eSBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUsIHByZXNlcnZpbmcgaXRzIHN0YXRzIGFuZCBpbnN0YWxsZWQgbW9kdWxlczsgdGhlIHBsYXllciBwYXlzIFJBTSBmb3IgdGhlIG5ldyBhc3NldCByb3cuIFJlcXVpcmVzIHRoZSBvd25lcidzIGFjdGl2ZSBwZXJtaXNzaW9uIChubyBzZXNzaW9uLWtleSBjb21wYXRpYmlsaXR5KS4HAAAAQKFpojkDaTY0AAALYmFsYW5jZV9yb3cAAADAT1MlRQNpNjQAAAtjb21wYW55X3JvdwAAWyg7TKtKA2k2NAAADmRlcG9zaXRjZmdfcm93AAAAAACspGEDaTY0AAAIZ2FtZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAQMYaVXP51ANpNjQAAA51bndyYXBjdXN0X3JvdwAAACobVs3lA2k2NAAADHdyYXBnYXRlX3JvdwETU2hpcGxvYWQgKFBsYXRmb3JtKRNTaGlwbG9hZCAoUGxhdGZvcm0pAAAAAA==');
@@ -440,7 +440,7 @@ var platform = /*#__PURE__*/Object.freeze({
440
440
  Contract: Contract$1
441
441
  });
442
442
 
443
- const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjBAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQlidWlsZHBsb3QAAgpidWlsZGVyX2lkBnVpbnQ2NAdwbG90X2lkBnVpbnQ2NAZjYW5jZWwAAwJpZAZ1aW50NjQIbGFuZV9rZXkFdWludDgFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8JY2xhaW1fcm93AAEFb3duZXIEbmFtZQljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8FY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAWBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAMAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQdpdGVtX2lkBnVpbnQxNgRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdBWxhbmVzBmxhbmVbXQVob2xkcwZob2xkW10OZW50aXR5X3NlcV9yb3cAAQduZXh0X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2DGdlbmVzaXNmbGVldAABCGVudGl0aWVzDGVudGl0eV9yb3dbXQpnZXRjbHVzdGVyAAEGaHViX2lkBnVpbnQ2NAlnZXRjb25maWcAAApnZXRkZXBvc2l0AAIFb3duZXIEbmFtZQhhc3NldF9pZAZ1aW50NjQLZ2V0ZGlzdGFuY2UABAJheAVpbnQ2NAJheQVpbnQ2NAJieAVpbnQ2NAJieQVpbnQ2NAtnZXRlbGlnaWJsZQACBmNvb3Jkcwtjb29yZGluYXRlcwdzdHJhdHVtBnVpbnQxNglnZXRlbnRjbHMAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAEJZW50aXR5X2lkBnVpbnQ2NAxnZXRmb290cHJpbnQAAQdpdGVtX2lkBnVpbnQxNgtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAAC2dldGl0ZW10eXBlAAEHaXRlbV9pZAZ1aW50MTYMZ2V0aXRlbXR5cGVzAAALZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtnZXR3b3JtaG9sZQACAXgFaW50NjQBeQVpbnQ2NAlncmlkX2NlbGwAAgJneARpbnQ4Amd5BGludDgMZ3JvdXB0cmFuc2l0AAUIZW50aXRpZXMMZW50aXR5X3JlZltdAmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMABAhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MzIQY2FwYWNpdHlfYnlfdGllchFoYXVsZXJfdGllcl9jYXBbXQ9oYXVsZXJfdGllcl9jYXAAAgR0aWVyBXVpbnQ4CGNhcGFjaXR5BXVpbnQ4BGhvbGQABQJpZAZ1aW50NjQEa2luZAV1aW50OAtjb3VudGVycGFydAplbnRpdHlfcmVmBXVudGlsCnRpbWVfcG9pbnQNaW5jb21pbmdfbWFzcwZ1aW50MzILaW1wb3J0Y2FyZ28AAQNyb3cJY2FyZ29fcm93DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQAQBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10MbG9hZGVyX2xhbmVzDWxvYWRlcl9sYW5lW10IbGF1bmNoZXIPbGF1bmNoZXJfc3RhdHM/BHRpZXIFdWludDgIcmVjaGFyZ2UAAQJpZAZ1aW50NjQMcmVjaXBlX2lucHV0AAIHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAgOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdD3NvdXJjZV9zdWJjbGFzcwd1aW50MTY/DnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0DHJlbW92ZW9yYWNsZQABCW9yYWNsZV9pZARuYW1lBnJlbmFtZQACAmlkBnVpbnQ2NARuYW1lBnN0cmluZwtyZXNlcnZlX3JvdwAFAmlkBnVpbnQ2NAhjb29yZF9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQGdWludDMyFG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CnJlc29sdmVhbGwAAQVvd25lcgRuYW1lEnJlc29sdmVhbGxfcmVzdWx0cwACB3NjYW5uZWQGdWludDMyCHJlc29sdmVkBnVpbnQzMg1yZXNvdXJjZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyCGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgOcmVzb3VyY2Vfc3RhdHMAAwVzdGF0MQZ1aW50MTYFc3RhdDIGdWludDE2BXN0YXQzBnVpbnQxNhByZXNvdXJjZXNfcmVzdWx0AAEJcmVzb3VyY2VzD3Jlc291cmNlX2luZm9bXQZyZXZlYWwAAwlvcmFjbGVfaWQEbmFtZQVlcG9jaAZ1aW50NjQGcmV2ZWFsC2NoZWNrc3VtMjU2CnJldmVhbF9yb3cABAJpZAZ1aW50NjQFZXBvY2gGdWludDY0CW9yYWNsZV9pZARuYW1lBnJldmVhbAtjaGVja3N1bTI1NghybW1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4CnRhcmdldF9yZWYKY2FyZ29fcmVmPwhybW5mdGNmZwABB2l0ZW1faWQGdWludDE2DnJvdXRlX3dheXBvaW50AAIBeAVpbnQ2NAF5BWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwlzZXRjb29yZHMAAwllbnRpdHlfaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAlzZXRuZnRjZmcAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDHNldHRocmVzaG9sZAABCXRocmVzaG9sZAV1aW50OAtzZXR3cmFwY29zdAADCWl0ZW1fdHlwZQV1aW50OAR0aWVyBXVpbnQ4BmFtb3VudAZ1aW50NjQKc2V0d3JhcGZlZQACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUIc2xvdF9kZWYAAwR0eXBlBXVpbnQ4Cm91dHB1dF9wY3QGdWludDE2CG1heF90aWVyBXVpbnQ4EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAMHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2CXN0b3djYXJnbwAFBW93bmVyBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NApzdG93ZW50aXR5AAMFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAMHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgpsYXN0X2Jsb2NrFGJsb2NrX3RpbWVzdGFtcF90eXBlCnN3YXBtb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZghzd2FwdGlsZQAFBmh1Yl9pZAZ1aW50NjQEYV9neARpbnQ4BGFfZ3kEaW50OARiX2d4BGludDgEYl9neQRpbnQ4BHRhc2sACgR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPwRob2xkB3VpbnQ2ND8OdGFyZ2V0X2l0ZW1faWQHdWludDE2Pwp0YXNrX2V2ZW50AAoKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BnVpbnQzMgR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MzI/CGxhbmVfa2V5BXVpbnQ4DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXRF0ZW1wbGF0ZV9tZXRhX3JvdwADB2l0ZW1faWQGdWludDE2BGtpbmQEbmFtZQ1kaXNwbGF5X2xhYmVsBnN0cmluZwd0cmFuc2l0AAUCaWQGdWludDY0AmF4BWludDY0AmF5BWludDY0AmJ4BWludDY0AmJ5BWludDY0BnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAt0cmF2ZWxyb3V0ZQADCGVudGl0aWVzDGVudGl0eV9yZWZbXQl3YXlwb2ludHMQcm91dGVfd2F5cG9pbnRbXQhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwAFAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcWc3RyYXR1bV9yZW1haW5pbmdfdHlwZRFzdHJhdHVtX3JlbWFpbmluZxVuZnRfaXRlbV9wYXlsb2FkX3R5cGUQbmZ0X2l0ZW1fcGF5bG9hZAh1bmRlcGxveQACB2hvc3RfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQGdW5sb2FkAAMCaWQGdWludDY0BXRvX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10HdXBncmFkZQAFCmJ1aWxkZXJfaWQGdWludDY0CXRhcmdldF9pZAZ1aW50NjQOdGFyZ2V0X2l0ZW1faWQGdWludDE2BmlucHV0cwxjYXJnb19pdGVtW10Ec2xvdAZ1aW50OD8Ed2FycAADAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAANd29ybWhvbGVfaW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwtpc193b3JtaG9sZQRib29sC2Rlc3RpbmF0aW9uC2Nvb3JkaW5hdGVzDndyYXBjb25maWdfcm93AAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQx3cmFwY29zdF9yb3cAAwlpdGVtX3R5cGUFdWludDgEdGllcgV1aW50OAZhbW91bnQGdWludDY0YgAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABQEZlLUzIJYWRkb3JhY2xlAAAAAACANFU8BWJsZW5k/AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBuZXcgYmxlbmRlZCBzdGF0cy4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAyDTWFJ0+CWJ1aWxkcGxvdAAAAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAMg0VulMRAljbGFpbXBsb3QAcFW+JmPpTEQMY2xhaW1zdGFydGVyAAAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLgAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24ukJWKCzuspmIMZ2VuZXNpc2ZsZWV0qQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2VuZXNpc2ZsZWV0CnN1bW1hcnk6ICdNaW50IHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbXBsYWNlIHRoZSBvbmUtdGltZSBnZW5lc2lzIGZsZWV0OiBhIGNhbGxlci1zdXBwbGllZCBzZXQgb2YgZW50aXRpZXMgKHNoaXBzLCBzdHJ1Y3R1cmVzLCBhbmQgY29udGFpbmVycykgd3JpdHRlbiB0byB0aGUgd29ybGQgYXMtaXMuIFZhbGlkIG9ubHkgZHVyaW5nIHRoZSBwcmUtZ2VuZXNpcyB3aW5kb3csIGJlZm9yZSBlcG9jaCAxIGlzIGZpbmFsaXplZC4gVGhlIHN1cHBsaWVkIGVudGl0eSBpZHMgYXJlIGhvbm9yZWQgYW5kIHRoZSBpZCBzZXF1ZW5jZSBpcyBhZHZhbmNlZCBwYXN0IHRoZW07IGlkIDAgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBHZW5lc2lzIE5leHVzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAMBVGeuIsmIKZ2V0Y2x1c3RlcgAAAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBAdphWlbJiCmdldGRlcG9zaXQAABSaJmOXsmILZ2V0ZGlzdGFuY2UAAFQ8jrmosmILZ2V0ZWxpZ2libGXIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbGlnaWJsZQpzdW1tYXJ5OiAnR2V0IGVsaWdpYmxlIHJlc291cmNlIGl0ZW0gSURzIGF0IGEgbG9jYXRpb24gYW5kIHN0cmF0dW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBsaXN0IG9mIHJlc291cmNlIGl0ZW0gSURzIGVsaWdpYmxlIHRvIGJlIGdhdGhlcmVkIGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcyBhbmQgc3RyYXR1bSBkZXB0aC4gSXRlbXMgYXJlIGdhdGVkIGJ5IGJvdGggdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgcHJvZmlsZSBhbmQgdGhlIGRlcHRoIHRocmVzaG9sZCBmb3IgZWFjaCB0aWVyLgAAwBHlqbJiCWdldGVudGNsc4wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGNscwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGVudGl0eSBjbGFzcyBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChPcmJpdGFsVmVzc2VsLCBQbGFuZXRhcnlTdHJ1Y3R1cmUpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBlbnRpdHkgY2xhc3MgaWRlbnRpZmllcnMuALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMukKe7NVO6smIMZ2V0Zm9vdHByaW50AABMNkmq7LJiC2dldGl0ZW1kYXRhqAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuAABOTqrssmIKZ2V0aXRlbWlkc4YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1pZHMKc3VtbWFyeTogJ0dldCBpdGVtIGlkIHRvIG5hbWUgbWFwcGluZ3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIG1hcHBpbmcgb2YgaXRlbSBpZCBjb25zdGFudHMgdG8gdGhlaXIgY2Fub25pY2FsIHN0cmluZyBuYW1lcy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byByZXNvbHZlIG51bWVyaWMgaXRlbSBpZHMgdG8gaHVtYW4tcmVhZGFibGUgaWRlbnRpZmllcnMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgBU9Vmq7LJiC2dldGl0ZW10eXBlAIBV9Vmq7LJiDGdldGl0ZW10eXBlc4gDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW10eXBlcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gdHlwZSBlbnVtIHZhbHVlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgc2V0IG9mIGl0ZW0gdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChyZXNvdXJjZSwgY29tcG9uZW50LCBtb2R1bGUsIGVudGl0eSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGl0ZW0gdHlwZSBpZGVudGlmaWVycy4ATFYyTQezYgtnZXRraW5kbWV0YfgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGtpbmRtZXRhCnN1bW1hcnk6ICdHZXQgZW50aXR5IGtpbmQgbWV0YWRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBlbnRpdHkga2luZCByZWdpc3RyeSBhbmQgdGVtcGxhdGUgcmVnaXN0cnksIGluY2x1ZGluZyBlYWNoIGtpbmQncyBjbGFzc2lmaWNhdGlvbiwgY2FwYWJpbGl0eSBmbGFncywgWi1jb29yZGluYXRlLCBhbmQgZGVmYXVsdCBsYWJlbCwgcGx1cyB0aGUgbWFwcGluZyBvZiBlbnRpdHkgaXRlbSBpZHMgdG8ga2luZHMgd2l0aCBkaXNwbGF5IGxhYmVscy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBpbnRlcnByZXQgZW50aXR5IGtpbmRzIGFuZCBjYXBhYmlsaXRpZXMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnnKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBhbmQgZmxpZ2h0IHRpbWUuAIDC5uQ1s2IKZ2V0bmZ0YmFzZQAAAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS6gssn40VuzYgxnZXRwcm9qc3RhdGXLAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwcm9qc3RhdGUKc3VtbWFyeTogJ0dldCBwcm9qZWN0ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcHJvamVjdGVkIHN0YXRlIG9mIGFuIGVudGl0eSBhZnRlciBhcHBseWluZyB0aGUgbmV4dCB0YXNrX2NvdW50IHNjaGVkdWxlZCB0YXNrcyAob3IgYWxsIHRhc2tzIGlmIHRhc2tfY291bnQgaXMgb21pdHRlZCkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcHJldmlldyB0aGUgcmVzdWx0IG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlIHdpdGhvdXQgcmVzb2x2aW5nIG9uLWNoYWluLgAAUNUhdbNiCWdldHJlY2lwZaYDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4AAFbVIXWzYgpnZXRyZWNpcGVzrAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLgAAzgZhdbNiCmdldHJlc2NhdHOeAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNjYXRzCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiByZXNvdXJjZSBjYXRlZ29yeSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChvcmUsIGdhcywgcmVnb2xpdGgsIGJpb21hc3MsIGNyeXN0YWwpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSByZXNvdXJjZSBzdWJ0eXBlIGlkZW50aWZpZXJzLgCw2ldhdbNiC2dldHJlc2VydmVz/AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzZXJ2ZXMKc3VtbWFyeTogJ0dldCBjdXJyZW50IHJlc2VydmUgbW9kaWZpY2F0aW9ucyBhdCBhIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBjaGFpbidzIG1vZGlmaWNhdGlvbnMgdG8gZGVyaXZlZCByZXNlcnZlcyBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZSBmb3IgdGhlIGN1cnJlbnQgZXBvY2ggYXMgYSBsaXN0IG9mIHtzdHJhdHVtLCByZW1haW5pbmd9IHBhaXJzLiBTdHJhdGEgbm90IHByZXNlbnQgaW4gdGhlIHJlc3BvbnNlIHVzZSB0aGVpciBkZXJpdmVkIGluaXRpYWwgcmVzZXJ2ZS4gQ29tcG9zZSB3aXRoIFNESyBkZXJpdmF0aW9uIHRvIGdldCB0aGUgZnVsbCBwZXItbG9jYXRpb24gc3RyYXRhIHZpZXcugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzhwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwDgs8tT5UurdAxpbXBvcnRlbnRpdHkAAKqml+VLq3QLaW1wb3J0Z3JvdXAAcJU3seZLq3QMaW1wb3J0cGxheWVyALqvwurmS6t0DWltcG9ydHJlc2VydmUAAFQ2GedLq3QLaW1wb3J0c3RhdGUAAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAA0NLWJBmxhdW5jaAAAAAAAAJAMjQRsb2FkAAAAACq6rDaVCG1vdmV0aWxlAAAAiFcz6fKaCW5mdGltZ3VybLIDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5mdGltZ3VybApzdW1tYXJ5OiAnR2V0IE5GVCBpbWFnZSBVUkwgZm9yIGEgY2FyZ28gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGltYWdlIFVSTCB0aGUgY29udHJhY3QgZW1pdHMgZm9yIGEgZ2l2ZW4gY2FyZ28gaXRlbSwgb3B0aW9uYWxseSBzY29wZWQgdG8gYSBsb2NhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBmZXRjaCB0aGUgY2Fub25pY2FsIGFydHdvcmsgZm9yIGFuIGl0ZW0gb3IgcGFja2VkIGVudGl0eS4AAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAGXXIIVMrApwbGFjZWNhcmdvyQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VjYXJnbwpzdW1tYXJ5OiAnUmVzdG9yZSBORlQgY2FyZ28gb250byBhIGhvc3QgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzdG9yZXMgdGhlIGNhcmdvIHJlY29yZGVkIGluIGFuIHVud3JhcHBlZCBORlQgb250byBhIGhvc3QgZW50aXR5LiBWYWxpZGF0ZXMgaG9zdCBvd25lcnNoaXAsIGxvYWRlcnMsIGFuZCByZW1haW5pbmcgY2FwYWNpdHksIGRlc2VyaWFsaXplcyB0aGUgTkZUJ3MgaXRlbSBkYXRhLCBhbmQgYXBwZW5kcyBhbiB1bndyYXAgdGFzayB0byBkZWxpdmVyIHRoZSBjYXJnbyB0byB0aGUgaG9zdC4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AfHZ5KoVMrAtwbGFjZWVudGl0ecAELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBsYWNlZW50aXR5CnN1bW1hcnk6ICdNYXRlcmlhbGl6ZSBhIHBhY2tlZC1lbnRpdHkgTkZUIGFzIGEgbGl2ZSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBFbXBsYWNlcyBhIGxpdmUgb3JiaXRhbCB2ZXNzZWwgKHNoaXAgb3IgY29udGFpbmVyKSBmcm9tIGl0cyBwYWNrZWQtZW50aXR5IE5GVCBkYXRhIGF0IHRoZSByZWNvcmRlZCB3cmFwIG9yaWdpbiwgdGhlbiBxdWV1ZXMgdHJhdmVsIGFuZCByZWNoYXJnZSB0YXNrcyB0byBkZWxpdmVyIGl0IHRvIHRoZSB0YXJnZXQgbmV4dXMgYXQgZnVsbCBlbmVyZ3kuIFRoZSBwbGF0Zm9ybSBjb250cmFjdCBjcmVkaXRzIHRoZSBkZXBvc2l0IHJlZnVuZCBhbmQgYnVybnMgdGhlIGFzc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLuCzy1M1fJe6DHJlZnJzaGVudGl0ebgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlZnJzaGVudGl0eQpzdW1tYXJ5OiAnUmVmcmVzaCBkZXJpdmVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVjb21wdXRlIGRlcml2ZWQgZmllbGRzIG9uIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGNhcmdvIGFuZCBtb2R1bGVzLCByZWZyZXNoaW5nIGNhcGFiaWxpdHkgc3RhdHMgYW5kIGNhcmdvIG1hc3MuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBVc2VkIHRvIHJlY29uY2lsZSBkZXJpdmVkIHN0YXRlIGFmdGVyIGRhdGEgbWlncmF0aW9ucyBvciBjb250cmFjdCB1cGdyYWRlcy6gIjKXqk2lugxyZW1vdmVvcmFjbGUAAAAAAChpproGcmVuYW1lAAAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAECMRu1IsboKcmVzb2x2ZWFsbAAAAAAARKO2ugZyZXZlYWwAAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAMDpUoqywglzZXRjb29yZHMAAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LpAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAoOwaxGnGCXN0b3djYXJnb9UFLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHN0b3djYXJnbwpzdW1tYXJ5OiAnUmVzZXJ2ZSBhIGNhcmdvIHN0YWNrIGZvciB3cmFwcGluZyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIFJlc2VydmVzIGFuZCBjb25zdW1lcyBhIGNhcmdvIHN0YWNrIG9uIGEgbGl2ZSBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBWYWxpZGF0ZXMgZW50aXR5IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHByZXNlbmNlIGF0IHRoZSBuZXh1cywgYW5kIGNvbmZpcm1zIHRoZSB0YXJnZXQgY2FyZ28gc3RhY2sgaXMgYXZhaWxhYmxlIGFuZCBub3QgcmVzZXJ2ZWQgYnkgYSBwZW5kaW5nIHRhc2suIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIE5GVCdzIGltbXV0YWJsZSBkYXRhLCBhbmQgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QgYmVmb3JlIGNvbnN1bWluZyB0aGUgY2FyZ28uIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AgM8uT8VpxgpzdG93ZW50aXR5mQUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2VudGl0eQpzdW1tYXJ5OiAnUmVzZXJ2ZSBhbiBlbnRpdHkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYSB3aG9sZSBlbnRpdHkgKHNoaXAsIGNvbnRhaW5lciwgb3IgcGxhbmV0YXJ5IHN0cnVjdHVyZSkgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZULiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvIGFuZCBubyBzY2hlZHVsZWQgdGFza3MuIENvbXB1dGVzIHRoZSB3cmFwIGNvc3QgYW5kIGZlZSwgZGViaXRzIHRoZW0gZnJvbSB0aGUgb3duZXIncyBwbGF0Zm9ybSBkZXBvc2l0IGJhbGFuY2UsIGRlcml2ZXMgdGhlIGVudGl0eSBORlQncyBpbW11dGFibGUgZGF0YSwgbWludHMgdGhlIE5GVCBpbmxpbmUgYXMgdGhlIGdhbWUgY29udHJhY3QsIGFuZCBlcmFzZXMgdGhlIGVudGl0eSBmcm9tIHRoZSB3b3JsZC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAijpRWQ3HCnN3YXBtb2R1bGUAAAAAKrpcDccIc3dhcHRpbGUAAAAAIDs8zc0HdHJhbnNpdAAAAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAFTW9Ea1zc0LdHJhdmVscm91dGUAAAAAnsaq0tQIdW5kZXBsb3nnBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1bmRlcGxveQpzdW1tYXJ5OiAnUGFjayBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGEgaG9zdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUGFjayBhbiBlbnRpdHkgaW50byBhIGhvc3QgZW50aXR5J3MgY2FyZ28gYXMgYSBwYWNrZWQtZW50aXR5IGl0ZW0uIEhvc3QgYW5kIHRhcmdldCBtdXN0IHNoYXJlIHRoZSBzYW1lIG93bmVyIGFuZCBjb29yZGluYXRlcywgdGhlIGhvc3QgbXVzdCBoYXZlIGxvYWRlcnMgYW5kIGVub3VnaCBjYXBhY2l0eSBmb3IgdGhlIHBhY2tlZCBtYXNzLCBhbmQgdGhlIHRhcmdldCBtdXN0IGJlIGlkbGUgd2l0aCBlbXB0eSBjYXJnby4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBhbmQgc2NoZWR1bGVzIHVuZGVwbG95IHRhc2tzIG9uIGJvdGggZW50aXRpZXM7IG9uIHJlc29sdXRpb24gdGhlIHRhcmdldCBpcyBlcmFzZWQgYW5kIHRoZSBwYWNrZWQgZW50aXR5IGlzIGFkZGVkIHRvIHRoZSBob3N0J3MgY2FyZ28uIEludmVyc2Ugb2YgZGVwbG95LgAAAAAkQ+PUBnVubG9hZAAAAABAJXNZ1Qd1cGdyYWRlAAAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tEgAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAAABg6UxEA2k2NAAACWNsYWltX3JvdwAAAOCqjHVEA2k2NAAAC2NsdXN0ZXJfcm93AAAAAGQnJUUDaTY0AAAKY29tbWl0X3JvdwAAAAD47PJUA2k2NAAACmVudGl0eV9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAALAK++zyVANpNjQAAA5lbnRpdHlfc2VxX3JvdwAAAACAhmhVA2k2NAAACWVwb2NoX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABza1JUzeUDaTY0AAAOd3JhcGNvbmZpZ19yb3cAAAAZU1TN5QNpNjQAAAx3cmFwY29zdF9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAQAAAyDTWFJ0+DHRhc2tfcmVzdWx0cwAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAADINFbpTEQMdGFza19yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAMBVGeuIsmILY2x1c3Rlcl9yb3cAAGBuTYqyYgtnYW1lX2NvbmZpZwBAdphWlbJiDmV4dGVuZGVkX2Fzc2V0ABSaJmOXsmIGdWludDY0AFQ8jrmosmIIdWludDE2W10AAMAR5amyYgtlbnVtX3Jlc3VsdACwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mb5CnuzVTurJiEGZvb3RwcmludF9yZXN1bHQATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAE5OquyyYg9pdGVtX2lkc19yZXN1bHQAAABYquyyYgppdGVtc19pbmZvAFT1WarssmIFdWludDiAVfVZquyyYgtlbnVtX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQBUpE1eyrNiDXdvcm1ob2xlX2luZm+QHZ7m5qrpZQx0YXNrX3Jlc3VsdHMAotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAADQ0tYkMdGFza19yZXN1bHRzAAAAAACQDI0MdGFza19yZXN1bHRzAAAAKrqsNpUMdGFza19yZXN1bHRzAACIVzPp8poGc3RyaW5nAABl1yCFTKwMdGFza19yZXN1bHRzAHx2eSqFTKwMdGFza19yZXN1bHRzAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAECMRu1IsboScmVzb2x2ZWFsbF9yZXN1bHRzAACg7BrEacYMdGFza19yZXN1bHRzAIDPLk/FacYMdGFza19yZXN1bHRzAAAAKrpcDccMdGFza19yZXN1bHRzAAAAIDs8zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRzAFTW9Ea1zc0MdGFza19yZXN1bHRzAAAAnsaq0tQMdGFza19yZXN1bHRzAAAAACRD49QMdGFza19yZXN1bHRzAAAAQCVzWdUMdGFza19yZXN1bHRzAAAAAABQr+EMdGFza19yZXN1bHRz');
443
+ const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDjWAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQJYWRkb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUFYmxlbmQAAgJpZAZ1aW50NjQGaW5wdXRzDGNhcmdvX2l0ZW1bXQxidWlsZGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYJYnVpbGRwbG90AAIKYnVpbGRlcl9pZAZ1aW50NjQHcGxvdF9pZAZ1aW50NjQGY2FuY2VsAAMCaWQGdWludDY0CGxhbmVfa2V5BXVpbnQ4BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwljYW5jZWxqb2IAAgZqb2JfaWQGdWludDY0B3NoaXBfaWQGdWludDY0CmNhcmdvX2l0ZW0ABQdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIJZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcmVmAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JZW50aXR5X2lkB3VpbnQ2ND8JY2FyZ29fcm93AAcCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdC3NlcXVlbmNlX2lkB3VpbnQ2ND8KY2FyZ29fdmlldwAGB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHF1YW50aXR5BnVpbnQzMgJpZAZ1aW50NjQJZW50aXR5X2lkB3VpbnQ2ND8PY2l2aWNjb25maWdfcm93AAELY2l2aWNfb3duZXIEbmFtZQljbGFpbV9yb3cAAQVvd25lcgRuYW1lCGNsYWltam9iAAIGam9iX2lkBnVpbnQ2NAdzaGlwX2lkBnVpbnQ2NAljbGFpbXBsb3QAAwpidWlsZGVyX2lkBnVpbnQ2NA50YXJnZXRfaXRlbV9pZAZ1aW50MTYEc2xvdAxjbHVzdGVyX3Nsb3QMY2xhaW1zdGFydGVyAAEFb3duZXIEbmFtZQljbGVhbnJzdnAAAgVlcG9jaAZ1aW50NjQIbWF4X3Jvd3MGdWludDY0CmNsZWFydGFibGUAAwp0YWJsZV9uYW1lBG5hbWUFc2NvcGUFbmFtZT8IbWF4X3Jvd3MHdWludDY0PwxjbHVzdGVyX2NlbGwAAwJneARpbnQ4Amd5BGludDgGZW50aXR5BnVpbnQ2NAtjbHVzdGVyX3JvdwACBHJvb3QGdWludDY0BWNlbGxzDmNsdXN0ZXJfY2VsbFtdDGNsdXN0ZXJfc2xvdAADA2h1YgZ1aW50NjQCZ3gEaW50OAJneQRpbnQ4BmNvbW1pdAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZjb21taXQLY2hlY2tzdW0yNTYKY29tbWl0X3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8IY291cGxpbmcAAwtjb3VudGVycGFydAplbnRpdHlfcmVmBGhvbGQGdWludDY0BGtpbmQFdWludDgFY3JhZnQABgJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQZ0YXJnZXQHdWludDY0PwRzbG90BnVpbnQ4PwxjcmFmdGVyX2xhbmUABApzbG90X2luZGV4BXVpbnQ4BXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MzIKb3V0cHV0X3BjdAZ1aW50MTYIY3JhZnRqb2IABgdzaGlwX2lkBnVpbnQ2NAt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OAlyZWNpcGVfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZpbnB1dHMMY2FyZ29faXRlbVtdCWRlbGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQADAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmBHNsb3QNY2x1c3Rlcl9zbG90PwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDMyCHJlY2hhcmdlBnVpbnQzMhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MzIPZW50aXR5X2RlZmF1bHRzAAILd2FyZWhvdXNlX3oGdWludDE2C2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXRlbV9pZAZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDMyPwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPw5nYXRoZXJlcl9sYW5lcw9nYXRoZXJlcl9sYW5lW10NY3JhZnRlcl9sYW5lcw5jcmFmdGVyX2xhbmVbXQ1idWlsZGVyX2xhbmVzDmJ1aWxkZXJfbGFuZVtdDGxvYWRlcl9sYW5lcw1sb2FkZXJfbGFuZVtdCGxhdW5jaGVyD2xhdW5jaGVyX3N0YXRzPwVsYW5lcwZsYW5lW10FaG9sZHMGaG9sZFtdDWVudGl0eV9sYXlvdXQAAw5lbnRpdHlfaXRlbV9pZAZ1aW50MTYFc2xvdHMKc2xvdF9kZWZbXQ1iYXNlX2h1bGxtYXNzBnVpbnQzMhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAAQhlbnRpdGllcw9lbnRpdHlfbGF5b3V0W10KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAplbnRpdHlfcm93AAwCaWQGdWludDY0BW93bmVyBG5hbWUEa2luZARuYW1lB2l0ZW1faWQGdWludDE2BG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kHdWludDMyPwljYXJnb21hc3MGdWludDMyB21vZHVsZXMObW9kdWxlX2VudHJ5W10FbGFuZXMGbGFuZVtdBWhvbGRzBmhvbGRbXQ5lbnRpdHlfc2VxX3JvdwABB25leHRfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAZ1aW50MzIQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdC2VudW1fbWVtYmVyAAIFdmFsdWUFdWludDgEbmFtZQZzdHJpbmcLZW51bV9yZXN1bHQAAQdtZW1iZXJzDWVudW1fbWVtYmVyW10JZXBvY2hfcm93AAQFZXBvY2gGdWludDY0Cm9yYWNsZV9pZHMGbmFtZVtdCXRocmVzaG9sZAV1aW50OARzZWVkC2NoZWNrc3VtMjU2DGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQQZm9vdHByaW50X3Jlc3VsdAABBWNlbGxzC2dyaWRfY2VsbFtdC2ZvcmNlcmV2ZWFsAAEFZXBvY2gGdWludDY0C2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAUJc291cmNlX2lkBnVpbnQ2NA5kZXN0aW5hdGlvbl9pZAZ1aW50NjQHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyBHNsb3QGdWludDg/DWdhdGhlcmVyX2xhbmUABQpzbG90X2luZGV4BXVpbnQ4BXlpZWxkBnVpbnQxNgVkcmFpbgZ1aW50MzIFZGVwdGgGdWludDE2Cm91dHB1dF9wY3QGdWludDE2CmdhdGhlcnBsYW4ABglzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIIcmVjaGFyZ2UEYm9vbAVzbG90cwVieXRlcwxnZW5lc2lzZmxlZXQAAQhlbnRpdGllcwxlbnRpdHlfcm93W10KZ2V0Y2x1c3RlcgABBmh1Yl9pZAZ1aW50NjQJZ2V0Y29uZmlnAAAKZ2V0ZGVwb3NpdAACBW93bmVyBG5hbWUIYXNzZXRfaWQGdWludDY0C2dldGRpc3RhbmNlAAQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYJZ2V0ZW50Y2xzAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMZ2V0Zm9vdHByaW50AAEHaXRlbV9pZAZ1aW50MTYLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAtnZXRpdGVtdHlwZQABB2l0ZW1faWQGdWludDE2DGdldGl0ZW10eXBlcwAAB2dldGpvYnMAAQt3b3Jrc2hvcF9pZAZ1aW50NjQLZ2V0a2luZG1ldGEAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRiYXNlAAAKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQxnZXRwcm9qc3RhdGUAAgllbnRpdHlfaWQGdWludDY0CnRhc2tfY291bnQGdWludDg/CWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAApnZXRzZXJ2aWNlAAELd29ya3Nob3BfaWQGdWludDY0CGdldHNsb3RzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dldHdvcm1ob2xlAAIBeAVpbnQ2NAF5BWludDY0CWdyaWRfY2VsbAACAmd4BGludDgCZ3kEaW50OAxncm91cHRyYW5zaXQABQhlbnRpdGllcwxlbnRpdHlfcmVmW10CYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQLZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwAECGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQzMhBjYXBhY2l0eV9ieV90aWVyEWhhdWxlcl90aWVyX2NhcFtdD2hhdWxlcl90aWVyX2NhcAACBHRpZXIFdWludDgIY2FwYWNpdHkFdWludDgEaG9sZAAFAmlkBnVpbnQ2NARraW5kBXVpbnQ4C2NvdW50ZXJwYXJ0CmVudGl0eV9yZWYFdW50aWwKdGltZV9wb2ludA1pbmNvbWluZ19tYXNzBnVpbnQzMgtpbXBvcnRjYXJnbwABA3JvdwljYXJnb19yb3cKaW1wb3J0Y2VsbAAEBHJvb3QGdWludDY0Amd4BGludDgCZ3kEaW50OAllbnRpdHlfaWQGdWludDY0DGltcG9ydGVudGl0eQABA3JvdwplbnRpdHlfcm93C2ltcG9ydGdyb3VwAAEDcm93D2VudGl0eWdyb3VwX3JvdwxpbXBvcnRwbGF5ZXIAAQVvd25lcgRuYW1lDWltcG9ydHJlc2VydmUAAgtlcG9jaF9zY29wZQZ1aW50MzIDcm93C3Jlc2VydmVfcm93C2ltcG9ydHN0YXRlAAEDcm93CXN0YXRlX3JvdwhpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdC2pvYl9yZWNlaXB0AAMGam9iX2lkBnVpbnQ2NAlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludAdqb2Jfcm93AAwCaWQGdWludDY0CHdvcmtzaG9wBnVpbnQ2NAZzb2NrZXQFdWludDgFb3duZXIEbmFtZQdzaGlwX2lkBnVpbnQ2NAZjb29yZHMLY29vcmRpbmF0ZXMJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzILZW5lcmd5X3BhaWQGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQtqb2JzX3Jlc3VsdAABBGpvYnMJam9iX3Jvd1tdBGpvaW4AAQdhY2NvdW50BG5hbWUQa2luZF9tZXRhX3Jlc3VsdAACBWtpbmRzD2tpbmRfbWV0YV9yb3dbXQl0ZW1wbGF0ZXMTdGVtcGxhdGVfbWV0YV9yb3dbXQ1raW5kX21ldGFfcm93AAUEa2luZARuYW1lDmNsYXNzaWZpY2F0aW9uBXVpbnQ4EGNhcGFiaWxpdHlfZmxhZ3MFdWludDgHel9jb29yZAZ1aW50MzINZGVmYXVsdF9sYWJlbAZzdHJpbmcEbGFuZQACCGxhbmVfa2V5BXVpbnQ4CHNjaGVkdWxlCHNjaGVkdWxlBmxhdW5jaAADC2xhdW5jaGVyX2lkBnVpbnQ2NApjYXRjaGVyX2lkBnVpbnQ2NAVpdGVtcwxjYXJnb19pdGVtW10ObGF1bmNoZXJfc3RhdHMAAwtjaGFyZ2VfcmF0ZQZ1aW50MTYIdmVsb2NpdHkGdWludDE2BWRyYWluBnVpbnQxNgRsb2FkAAMCaWQGdWludDY0B2Zyb21faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQtsb2FkZXJfbGFuZQAECnNsb3RfaW5kZXgFdWludDgEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNgpvdXRwdXRfcGN0BnVpbnQxNhBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwRzaXplBnVpbnQxNg1sb2NhdGlvbl9pbmZvAAMGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sC2lzX3dvcm1ob2xlBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1pZ3JhdGV0YXNrcwABBWJhdGNoBnVpbnQzMgdtaWdzd2FwAAEFYmF0Y2gGdWludDMyDG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQzMghtb3ZldGlsZQAFBmh1Yl9pZAZ1aW50NjQHZnJvbV9neARpbnQ4B2Zyb21fZ3kEaW50OAV0b19neARpbnQ4BXRvX2d5BGludDgLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MzIHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8ObmZ0X2NhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNgVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhxdWFudGl0eQZ1aW50MzIQbmZ0X2l0ZW1fcGF5bG9hZAACBGl0ZW0ObmZ0X2NhcmdvX2l0ZW0IbG9jYXRpb24MY29vcmRpbmF0ZXM/Dm5mdF9zY2hlbWFfZGVmAAILc2NoZW1hX25hbWUEbmFtZQZmaWVsZHMOc2NoZW1hX2ZpZWxkW10QbmZ0X3RlbXBsYXRlX2RlZgADB2l0ZW1faWQGdWludDE2C3NjaGVtYV9uYW1lBG5hbWULdGVtcGxhdGVfaWQFaW50MzINbmZ0Y29uZmlnX3JvdwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUJbmZ0aW1ndXJsAAIEaXRlbQpjYXJnb19pdGVtCGxvY2F0aW9uDGNvb3JkaW5hdGVzPw5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQRb3JhY2xlX2NvbmZpZ19yb3cAAQl0aHJlc2hvbGQFdWludDgKb3JhY2xlX3JvdwABAmlkBG5hbWUNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NApwbGFjZWNhcmdvAAMFb3duZXIEbmFtZQdob3N0X2lkBnVpbnQ2NAhhc3NldF9pZAZ1aW50NjQLcGxhY2VlbnRpdHkAAwVvd25lcgRuYW1lCGFzc2V0X2lkBnVpbnQ2NA90YXJnZXRfbmV4dXNfaWQGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lD3Byb2plY3RlZF9zdGF0ZQARBW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb192aWV3W10IaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8OZ2F0aGVyZXJfbGFuZXMPZ2F0aGVyZXJfbGFuZVtdDWNyYWZ0ZXJfbGFuZXMOY3JhZnRlcl9sYW5lW10NYnVpbGRlcl9sYW5lcw5idWlsZGVyX2xhbmVbXQxsb2FkZXJfbGFuZXMNbG9hZGVyX2xhbmVbXQhsYXVuY2hlcg9sYXVuY2hlcl9zdGF0cz8EdGllcgV1aW50OAhyZWNoYXJnZQABAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAgdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UACA5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10Pc291cmNlX3N1YmNsYXNzB3VpbnQxNj8OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdDHJlZnJzaGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQMcmVtb3Zlb3JhY2xlAAEJb3JhY2xlX2lkBG5hbWUGcmVuYW1lAAICaWQGdWludDY0BG5hbWUGc3RyaW5nC3Jlc2VydmVfcm93AAUCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUHcmVzb2x2ZQACAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAZ1aW50MzIUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8KcmVzb2x2ZWFsbAABBW93bmVyBG5hbWUScmVzb2x2ZWFsbF9yZXN1bHRzAAIHc2Nhbm5lZAZ1aW50MzIIcmVzb2x2ZWQGdWludDMyDXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdBnJldmVhbAADCW9yYWNsZV9pZARuYW1lBWVwb2NoBnVpbnQ2NAZyZXZlYWwLY2hlY2tzdW0yNTYKcmV2ZWFsX3JvdwAEAmlkBnVpbnQ2NAVlcG9jaAZ1aW50NjQJb3JhY2xlX2lkBG5hbWUGcmV2ZWFsC2NoZWNrc3VtMjU2CHJtbW9kdWxlAAMJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgKdGFyZ2V0X3JlZgpjYXJnb19yZWY/CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYOcm91dGVfd2F5cG9pbnQAAgF4BWludDY0AXkFaW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nC3NlcnZpY2Vfcm93AAIGZW50aXR5BnVpbnQ2NAdzb2NrZXRzEHNlcnZpY2Vfc29ja2V0W10Oc2VydmljZV9zb2NrZXQAAQRvcGVuBGJvb2wIc2V0Y2l2aWMAAQdhY2NvdW50BG5hbWUJc2V0Y29vcmRzAAMJZW50aXR5X2lkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQlzZXRzb2NrZXQAAwt3b3Jrc2hvcF9pZAZ1aW50NjQEc2xvdAV1aW50OARvcGVuBGJvb2wMc2V0dGhyZXNob2xkAAEJdGhyZXNob2xkBXVpbnQ4C3NldHdyYXBjb3N0AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NApzZXR3cmFwZmVlAAIHZmVlX3BjdAZ1aW50MTYLZmVlX2FjY291bnQEbmFtZQdzaHV0dGxlAAQHY2FycmllcgZ1aW50NjQHZnJvbV9pZAZ1aW50NjQFdG9faWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQhzbG90X2RlZgADBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYIbWF4X3RpZXIFdWludDgSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cAAwdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYJc3Rvd2NhcmdvAAUFb3duZXIEbmFtZQllbnRpdHlfaWQGdWludDY0CG5leHVzX2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CnN0b3dlbnRpdHkAAwVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAFB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgtyZXNlcnZlX21heAZ1aW50MzIRc3RyYXR1bV9yZW1haW5pbmcAAwdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyCmxhc3RfYmxvY2sUYmxvY2tfdGltZXN0YW1wX3R5cGUKc3dhcG1vZHVsZQADCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4Cm1vZHVsZV9yZWYJY2FyZ29fcmVmCHN3YXB0aWxlAAUGaHViX2lkBnVpbnQ2NARhX2d4BGludDgEYV9neQRpbnQ4BGJfZ3gEaW50OARiX2d5BGludDgEdGFzawAKBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQljb3VwbGluZ3MKY291cGxpbmdbXQdzdWJqZWN0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDMyPw50YXJnZXRfaXRlbV9pZAd1aW50MTY/CnRhc2tfZXZlbnQACgpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgGdWludDMyBHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQzMj8IbGFuZV9rZXkFdWludDgMdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdEXRlbXBsYXRlX21ldGFfcm93AAMHaXRlbV9pZAZ1aW50MTYEa2luZARuYW1lDWRpc3BsYXlfbGFiZWwGc3RyaW5nB3RyYW5zaXQABQJpZAZ1aW50NjQCYXgFaW50NjQCYXkFaW50NjQCYngFaW50NjQCYnkFaW50NjQGdHJhdmVsAAQCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCnRyYXZlbHBsYW4AAwhlbnRpdGllcwxlbnRpdHlfcmVmW10Jd2F5cG9pbnRzEHJvdXRlX3dheXBvaW50W10IcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABQJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcVbmZ0X2l0ZW1fcGF5bG9hZF90eXBlEG5mdF9pdGVtX3BheWxvYWQIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BnVubG9hZAADAmlkBnVpbnQ2NAV0b19pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdB3VwZ3JhZGUABQpidWlsZGVyX2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0DnRhcmdldF9pdGVtX2lkBnVpbnQxNgZpbnB1dHMMY2FyZ29faXRlbVtdBHNsb3QGdWludDg/BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADXdvcm1ob2xlX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMLaXNfd29ybWhvbGUEYm9vbAtkZXN0aW5hdGlvbgtjb29yZGluYXRlcw53cmFwY29uZmlnX3JvdwACB2ZlZV9wY3QGdWludDE2C2ZlZV9hY2NvdW50BG5hbWUMd3JhcGNvc3Rfcm93AAMJaXRlbV90eXBlBXVpbnQ4BHRpZXIFdWludDgGYW1vdW50BnVpbnQ2NG8AAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAUBGZS1MyCWFkZG9yYWNsZQAAAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAMg01hSdPglidWlsZHBsb3QAAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAAA49EWFpkEJY2FuY2Vsam9iAAAAAIc+6UxECGNsYWltam9iAAAAyDRW6UxECWNsYWltcGxvdABwVb4mY+lMRAxjbGFpbXN0YXJ0ZXIAAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMuAAAAh768zEUIY3JhZnRqb2IAAADw2eWpokoJZGVsZW50aXR5AAAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzkAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZml4Y2FyZ29tYXNzCnN1bW1hcnk6ICdERUJVRzogcmVjb21wdXRlIGVudGl0eSBjYXJnbyBtYXNzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgYW5kIHJld3JpdGUgYW4gZW50aXR5J3MgY2FyZ28gbWFzcyBmcm9tIGl0cyBjdXJyZW50IGNhcmdvLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuIEF2YWlsYWJsZSBmb3IgcmVwYWlyaW5nIGRyaWZ0IGJldHdlZW4gY2FjaGVkIGNhcmdvIG1hc3MgYW5kIHRoZSB0cnVlIG1hc3MgZGVyaXZlZCBmcm9tIGNhcmdvIHJvd3MuAKJRW12FLl0LZm9yY2VyZXZlYWy+BC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBmb3JjZXJldmVhbApzdW1tYXJ5OiAnREVCVUc6IGZvcmNlLWZpbmFsaXplIGFuIGVwb2NoIGZyb20gZXhpc3RpbmcgcmV2ZWFscycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRmluYWxpemUgYSBzdHVjayBlcG9jaCBieSBjb21wdXRpbmcgaXRzIHNlZWQgZnJvbSB0aGUgcmV2ZWFscyBhbHJlYWR5IHN1Ym1pdHRlZCwgd2l0aG91dCB3YWl0aW5nIGZvciB0aGUgY29uZmlndXJlZCB0aHJlc2hvbGQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4gVGhlIHNlZWQgaXMgZGVyaXZlZCBzb2xlbHkgZnJvbSB0aGUgcHJlLWltYWdlLWxvY2tlZCByZXZlYWxzIGFscmVhZHkgb24gY2hhaW47IG5vIGFkbWluLXN1cHBsaWVkIGVudHJvcHkgaXMgaW50cm9kdWNlZC4gVXNlZCB0byB1bmJsb2NrIGVwb2NoIHByb2dyZXNzaW9uIHdoZW4gdGhlIHRocmVzaG9sZCBjYW5ub3Qgb3RoZXJ3aXNlIGJlIG1ldC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAMA0sV7VsmEKZ2F0aGVycGxhbgCQlYoLO6ymYgxnZW5lc2lzZmxlZXSpBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZW5lc2lzZmxlZXQKc3VtbWFyeTogJ01pbnQgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVtcGxhY2UgdGhlIG9uZS10aW1lIGdlbmVzaXMgZmxlZXQ6IGEgY2FsbGVyLXN1cHBsaWVkIHNldCBvZiBlbnRpdGllcyAoc2hpcHMsIHN0cnVjdHVyZXMsIGFuZCBjb250YWluZXJzKSB3cml0dGVuIHRvIHRoZSB3b3JsZCBhcy1pcy4gVmFsaWQgb25seSBkdXJpbmcgdGhlIHByZS1nZW5lc2lzIHdpbmRvdywgYmVmb3JlIGVwb2NoIDEgaXMgZmluYWxpemVkLiBUaGUgc3VwcGxpZWQgZW50aXR5IGlkcyBhcmUgaG9ub3JlZCBhbmQgdGhlIGlkIHNlcXVlbmNlIGlzIGFkdmFuY2VkIHBhc3QgdGhlbTsgaWQgMCBpcyByZXNlcnZlZCBmb3IgdGhlIEdlbmVzaXMgTmV4dXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AwFUZ64iyYgpnZXRjbHVzdGVyAAAAYG5NirJiCWdldGNvbmZpZ8oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGNvbmZpZwpzdW1tYXJ5OiAnR2V0IGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgZ2FtZSBjb25maWd1cmF0aW9uIGluY2x1ZGluZyBkZWZhdWx0IGVudGl0eSBzdGF0cyBmb3Igd2FyZWhvdXNlcyBhbmQgY29udGFpbmVycywgYW5kIHRoZSBmdWxsIGl0ZW0gZGVmaW5pdGlvbnMgdGFibGUuAEB2mFaVsmIKZ2V0ZGVwb3NpdAAAFJomY5eyYgtnZXRkaXN0YW5jZQAAVDyOuaiyYgtnZXRlbGlnaWJsZcgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVsaWdpYmxlCnN1bW1hcnk6ICdHZXQgZWxpZ2libGUgcmVzb3VyY2UgaXRlbSBJRHMgYXQgYSBsb2NhdGlvbiBhbmQgc3RyYXR1bScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGxpc3Qgb2YgcmVzb3VyY2UgaXRlbSBJRHMgZWxpZ2libGUgdG8gYmUgZ2F0aGVyZWQgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGFuZCBzdHJhdHVtIGRlcHRoLiBJdGVtcyBhcmUgZ2F0ZWQgYnkgYm90aCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBwcm9maWxlIGFuZCB0aGUgZGVwdGggdGhyZXNob2xkIGZvciBlYWNoIHRpZXIuAADAEeWpsmIJZ2V0ZW50Y2xzjAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50Y2xzCnN1bW1hcnk6ICdHZXQgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgZW50aXR5IGNsYXNzIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKE9yYml0YWxWZXNzZWwsIFBsYW5ldGFyeVN0cnVjdHVyZSkuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIGVudGl0eSBjbGFzcyBpZGVudGlmaWVycy4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy6Qp7s1U7qyYgxnZXRmb290cHJpbnQAAEw2SarssmILZ2V0aXRlbWRhdGGoAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtZGF0YQpzdW1tYXJ5OiAnR2V0IGZ1bGwgaXRlbSBjYXRhbG9nJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgY29tcGxldGUgaXRlbSBjYXRhbG9nIGFzIHRoZSBjb250cmFjdCBzZWVzIGl0LCBpbmNsdWRpbmcgdHlwZSwgc3VidHlwZSwgdGllciwgbWFzcywgYW5kIG90aGVyIHN0YXRpYyBtZXRhZGF0YS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgY2xpZW50cyB0byBtaXJyb3IgdGhlIGNvbnRyYWN0J3MgaXRlbSBkZWZpbml0aW9ucy4AAE5OquyyYgpnZXRpdGVtaWRzhgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWlkcwpzdW1tYXJ5OiAnR2V0IGl0ZW0gaWQgdG8gbmFtZSBtYXBwaW5ncycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGZ1bGwgbWFwcGluZyBvZiBpdGVtIGlkIGNvbnN0YW50cyB0byB0aGVpciBjYW5vbmljYWwgc3RyaW5nIG5hbWVzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHJlc29sdmUgbnVtZXJpYyBpdGVtIGlkcyB0byBodW1hbi1yZWFkYWJsZSBpZGVudGlmaWVycy4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuAFT1WarssmILZ2V0aXRlbXR5cGUAgFX1WarssmIMZ2V0aXRlbXR5cGVziAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXR5cGVzCnN1bW1hcnk6ICdHZXQgaXRlbSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgaXRlbSB0eXBlIGVudW0gdmFsdWVzIGFuZCB0aGVpciBzdHJpbmcgbmFtZXMgKHJlc291cmNlLCBjb21wb25lbnQsIG1vZHVsZSwgZW50aXR5KS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgaXRlbSB0eXBlIGlkZW50aWZpZXJzLgAAAAAf+rJiB2dldGpvYnMAAExWMk0Hs2ILZ2V0a2luZG1ldGH4Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRraW5kbWV0YQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBraW5kIG1ldGFkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZW50aXR5IGtpbmQgcmVnaXN0cnkgYW5kIHRlbXBsYXRlIHJlZ2lzdHJ5LCBpbmNsdWRpbmcgZWFjaCBraW5kJ3MgY2xhc3NpZmljYXRpb24sIGNhcGFiaWxpdHkgZmxhZ3MsIFotY29vcmRpbmF0ZSwgYW5kIGRlZmF1bHQgbGFiZWwsIHBsdXMgdGhlIG1hcHBpbmcgb2YgZW50aXR5IGl0ZW0gaWRzIHRvIGtpbmRzIHdpdGggZGlzcGxheSBsYWJlbHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gaW50ZXJwcmV0IGVudGl0eSBraW5kcyBhbmQgY2FwYWJpbGl0aWVzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuALCqPicqs2ILZ2V0bW9kdHlwZXPWAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R0eXBlcwpzdW1tYXJ5OiAnR2V0IG1vZHVsZSB0eXBlIGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAoYW55LCBlbmdpbmUsIGdlbmVyYXRvciwgZ2F0aGVyZXIsIGxvYWRlciwgd2FycCwgY3JhZnRlciwgbGF1bmNoZXIsIHN0b3JhZ2UsIGhhdWxlcikuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGVjb2RlIG1vZHVsZSBzdWJ0eXBlIGlkZW50aWZpZXJzIGFuZCBzbG90IGNvbXBhdGliaWxpdHkuAABWUScqs2IKZ2V0bW9kdWxlc4ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHVsZXMKc3VtbWFyeTogJ0dldCBhbGwgbW9kdWxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgbW9kdWxlcywgaW5jbHVkaW5nIGVhY2ggbW9kdWxlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBpbnN0YWxsYWJsZSBlcXVpcG1lbnQuAADw5xo1s2IJZ2V0bmVhcmJ5ygMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgYW5kIGZsaWdodCB0aW1lLgCAwubkNbNiCmdldG5mdGJhc2UAAABd0+U1s2IKZ2V0bmZ0aW5mb/ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuoLLJ+NFbs2IMZ2V0cHJvanN0YXRlywMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cHJvanN0YXRlCnN1bW1hcnk6ICdHZXQgcHJvamVjdGVkIGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHByb2plY3RlZCBzdGF0ZSBvZiBhbiBlbnRpdHkgYWZ0ZXIgYXBwbHlpbmcgdGhlIG5leHQgdGFza19jb3VudCBzY2hlZHVsZWQgdGFza3MgKG9yIGFsbCB0YXNrcyBpZiB0YXNrX2NvdW50IGlzIG9taXR0ZWQpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHByZXZpZXcgdGhlIHJlc3VsdCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZSB3aXRob3V0IHJlc29sdmluZyBvbi1jaGFpbi4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgCAQm5fhbNiCmdldHNlcnZpY2UAAAAAONOIs2IIZ2V0c2xvdHO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzbG90cwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzbG90IGxheW91dHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBtb2R1bGUgc2xvdCBsYXlvdXQgZm9yIGV2ZXJ5IGVudGl0eSBpdGVtIHR5cGUsIGxpc3RpbmcgdGhlIG9yZGVyZWQgc2xvdCB0eXBlcyBhdmFpbGFibGUgZm9yIG1vZHVsZSBpbnN0YWxsYXRpb24uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGV0ZXJtaW5lIHdoaWNoIG1vZHVsZSB0eXBlcyBhcmUgY29tcGF0aWJsZSB3aXRoIGEgZ2l2ZW4gZW50aXR5IGh1bGwuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgBUpE1eyrNiC2dldHdvcm1ob2xlAJAdnubmqullDGdyb3VwdHJhbnNpdAAAotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AKLsG5UurdAtpbXBvcnRjYXJnbwAAQIwK5UurdAppbXBvcnRjZWxsAOCzy1PlS6t0DGltcG9ydGVudGl0eQAAqqaX5UurdAtpbXBvcnRncm91cABwlTex5kurdAxpbXBvcnRwbGF5ZXIAuq/C6uZLq3QNaW1wb3J0cmVzZXJ2ZQAAVDYZ50urdAtpbXBvcnRzdGF0ZQAAAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAADQ0tYkGbGF1bmNoAAAAAAAAkAyNBGxvYWQAgCE2WWVzmZMMbWlncmF0ZXRhc2tzAAAAAKAajpmTB21pZ3N3YXAAAAAAKrqsNpUIbW92ZXRpbGUAAACIVzPp8poJbmZ0aW1ndXJssgMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbmZ0aW1ndXJsCnN1bW1hcnk6ICdHZXQgTkZUIGltYWdlIFVSTCBmb3IgYSBjYXJnbyBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgaW1hZ2UgVVJMIHRoZSBjb250cmFjdCBlbWl0cyBmb3IgYSBnaXZlbiBjYXJnbyBpdGVtLCBvcHRpb25hbGx5IHNjb3BlZCB0byBhIGxvY2F0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGZldGNoIHRoZSBjYW5vbmljYWwgYXJ0d29yayBmb3IgYW4gaXRlbSBvciBwYWNrZWQgZW50aXR5LgAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAZdcghUysCnBsYWNlY2FyZ2/JBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBwbGFjZWNhcmdvCnN1bW1hcnk6ICdSZXN0b3JlIE5GVCBjYXJnbyBvbnRvIGEgaG9zdCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXN0b3JlcyB0aGUgY2FyZ28gcmVjb3JkZWQgaW4gYW4gdW53cmFwcGVkIE5GVCBvbnRvIGEgaG9zdCBlbnRpdHkuIFZhbGlkYXRlcyBob3N0IG93bmVyc2hpcCwgbG9hZGVycywgYW5kIHJlbWFpbmluZyBjYXBhY2l0eSwgZGVzZXJpYWxpemVzIHRoZSBORlQncyBpdGVtIGRhdGEsIGFuZCBhcHBlbmRzIGFuIHVud3JhcCB0YXNrIHRvIGRlbGl2ZXIgdGhlIGNhcmdvIHRvIHRoZSBob3N0LiBUaGUgcGxhdGZvcm0gY29udHJhY3QgY3JlZGl0cyB0aGUgZGVwb3NpdCByZWZ1bmQgYW5kIGJ1cm5zIHRoZSBhc3NldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgB8dnkqhUysC3BsYWNlZW50aXR5wAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcGxhY2VlbnRpdHkKc3VtbWFyeTogJ01hdGVyaWFsaXplIGEgcGFja2VkLWVudGl0eSBORlQgYXMgYSBsaXZlIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIGNhbGxlZCBpbmxpbmUgYnkgdGhlIHBsYXRmb3JtIGNvbnRyYWN0IG9ubHkuIEVtcGxhY2VzIGEgbGl2ZSBvcmJpdGFsIHZlc3NlbCAoc2hpcCBvciBjb250YWluZXIpIGZyb20gaXRzIHBhY2tlZC1lbnRpdHkgTkZUIGRhdGEgYXQgdGhlIHJlY29yZGVkIHdyYXAgb3JpZ2luLCB0aGVuIHF1ZXVlcyB0cmF2ZWwgYW5kIHJlY2hhcmdlIHRhc2tzIHRvIGRlbGl2ZXIgaXQgdG8gdGhlIHRhcmdldCBuZXh1cyBhdCBmdWxsIGVuZXJneS4gVGhlIHBsYXRmb3JtIGNvbnRyYWN0IGNyZWRpdHMgdGhlIGRlcG9zaXQgcmVmdW5kIGFuZCBidXJucyB0aGUgYXNzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUu4LPLUzV8l7oMcmVmcnNoZW50aXR5uAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVmcnNoZW50aXR5CnN1bW1hcnk6ICdSZWZyZXNoIGRlcml2ZWQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZWNvbXB1dGUgZGVyaXZlZCBmaWVsZHMgb24gYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgY2FyZ28gYW5kIG1vZHVsZXMsIHJlZnJlc2hpbmcgY2FwYWJpbGl0eSBzdGF0cyBhbmQgY2FyZ28gbWFzcy4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFVzZWQgdG8gcmVjb25jaWxlIGRlcml2ZWQgc3RhdGUgYWZ0ZXIgZGF0YSBtaWdyYXRpb25zIG9yIGNvbnRyYWN0IHVwZ3JhZGVzLqAiMpeqTaW6DHJlbW92ZW9yYWNsZQAAAAAAKGmmugZyZW5hbWUAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AQIxG7UixugpyZXNvbHZlYWxsAAAAAABEo7a6BnJldmVhbAAAAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAMhth7LCCHNldGNpdmljAAAAwOlSirLCCXNldGNvb3JkcwAAAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAADICiKKs8IJc2V0c29ja2V0AJAibVjdlrPCDHNldHRocmVzaG9sZAAAMqaomsuzwgtzZXR3cmFwY29zdAAAgFKrmsuzwgpzZXR3cmFwZmVlAAAAAEDFnHXDB3NodXR0bGUAAACg7BrEacYJc3Rvd2Nhcmdv1QUtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Rvd2NhcmdvCnN1bW1hcnk6ICdSZXNlcnZlIGEgY2FyZ28gc3RhY2sgZm9yIHdyYXBwaW5nIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gY2FsbGVkIGlubGluZSBieSB0aGUgcGxhdGZvcm0gY29udHJhY3Qgb25seS4gUmVzZXJ2ZXMgYW5kIGNvbnN1bWVzIGEgY2FyZ28gc3RhY2sgb24gYSBsaXZlIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFZhbGlkYXRlcyBlbnRpdHkgb3duZXJzaGlwLCBsb2FkZXJzLCBhbmQgcHJlc2VuY2UgYXQgdGhlIG5leHVzLCBhbmQgY29uZmlybXMgdGhlIHRhcmdldCBjYXJnbyBzdGFjayBpcyBhdmFpbGFibGUgYW5kIG5vdCByZXNlcnZlZCBieSBhIHBlbmRpbmcgdGFzay4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgTkZUJ3MgaW1tdXRhYmxlIGRhdGEsIGFuZCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCBiZWZvcmUgY29uc3VtaW5nIHRoZSBjYXJnby4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgCAzy5PxWnGCnN0b3dlbnRpdHmZBS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdG93ZW50aXR5CnN1bW1hcnk6ICdSZXNlcnZlIGFuIGVudGl0eSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiBjYWxsZWQgaW5saW5lIGJ5IHRoZSBwbGF0Zm9ybSBjb250cmFjdCBvbmx5LiBSZXNlcnZlcyBhIHdob2xlIGVudGl0eSAoc2hpcCwgY29udGFpbmVyLCBvciBwbGFuZXRhcnkgc3RydWN0dXJlKSBmb3Igd3JhcHBpbmcgaW50byBhbiBORlQuIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28gYW5kIG5vIHNjaGVkdWxlZCB0YXNrcy4gQ29tcHV0ZXMgdGhlIHdyYXAgY29zdCBhbmQgZmVlLCBkZWJpdHMgdGhlbSBmcm9tIHRoZSBvd25lcidzIHBsYXRmb3JtIGRlcG9zaXQgYmFsYW5jZSwgZGVyaXZlcyB0aGUgZW50aXR5IE5GVCdzIGltbXV0YWJsZSBkYXRhLCBtaW50cyB0aGUgTkZUIGlubGluZSBhcyB0aGUgZ2FtZSBjb250cmFjdCwgYW5kIGVyYXNlcyB0aGUgZW50aXR5IGZyb20gdGhlIHdvcmxkLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAICKOlFZDccKc3dhcG1vZHVsZQAAAAAqulwNxwhzd2FwdGlsZQAAAAAgOzzNzQd0cmFuc2l0AAAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AwDSxRrXNzQp0cmF2ZWxwbGFuAAAAAJ7GqtLUCHVuZGVwbG955wQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdW5kZXBsb3kKc3VtbWFyeTogJ1BhY2sgYSBkZXBsb3llZCBlbnRpdHkgaW50byBhIGhvc3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClBhY2sgYW4gZW50aXR5IGludG8gYSBob3N0IGVudGl0eSdzIGNhcmdvIGFzIGEgcGFja2VkLWVudGl0eSBpdGVtLiBIb3N0IGFuZCB0YXJnZXQgbXVzdCBzaGFyZSB0aGUgc2FtZSBvd25lciBhbmQgY29vcmRpbmF0ZXMsIHRoZSBob3N0IG11c3QgaGF2ZSBsb2FkZXJzIGFuZCBlbm91Z2ggY2FwYWNpdHkgZm9yIHRoZSBwYWNrZWQgbWFzcywgYW5kIHRoZSB0YXJnZXQgbXVzdCBiZSBpZGxlIHdpdGggZW1wdHkgY2FyZ28uIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgYW5kIHNjaGVkdWxlcyB1bmRlcGxveSB0YXNrcyBvbiBib3RoIGVudGl0aWVzOyBvbiByZXNvbHV0aW9uIHRoZSB0YXJnZXQgaXMgZXJhc2VkIGFuZCB0aGUgcGFja2VkIGVudGl0eSBpcyBhZGRlZCB0byB0aGUgaG9zdCdzIGNhcmdvLiBJbnZlcnNlIG9mIGRlcGxveS4AAAAAJEPj1AZ1bmxvYWQAAAAAQCVzWdUHdXBncmFkZQAAAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLRYAAAAAAMquQQNpNjQAAAljYXJnb19yb3cAmFuTIuS2QwNpNjQAAA9jaXZpY2NvbmZpZ19yb3cAAAAAYOlMRANpNjQAAAljbGFpbV9yb3cAAADgqox1RANpNjQAAAtjbHVzdGVyX3JvdwAAAABkJyVFA2k2NAAACmNvbW1pdF9yb3cAAAAA+OzyVANpNjQAAAplbnRpdHlfcm93AABzEvjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAsAr77PJUA2k2NAAADmVudGl0eV9zZXFfcm93AAAAAICGaFUDaTY0AAAJZXBvY2hfcm93AAAAAACAD30DaTY0AAAHam9iX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAGALqYjMpQNpNjQAABFvcmFjbGVfY29uZmlnX3JvdwAAAACriMylA2k2NAAACm9yYWNsZV9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAARKO2ugNpNjQAAApyZXZlYWxfcm93AAAAQCG3r8IDaTY0AAALc2VydmljZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAHNrUlTN5QNpNjQAAA53cmFwY29uZmlnX3JvdwAAABlTVM3lA2k2NAAADHdyYXBjb3N0X3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAABFAADINNYUnT4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAMg0VulMRAx0YXNrX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAACHvrzMRQtqb2JfcmVjZWlwdAAAAA27SKVKDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwDANLFe1bJhDHRhc2tfcmVzdWx0cwDAVRnriLJiC2NsdXN0ZXJfcm93AABgbk2KsmILZ2FtZV9jb25maWcAQHaYVpWyYg5leHRlbmRlZF9hc3NldAAUmiZjl7JiBnVpbnQ2NABUPI65qLJiCHVpbnQxNltdAADAEeWpsmILZW51bV9yZXN1bHQAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm+Qp7s1U7qyYhBmb290cHJpbnRfcmVzdWx0AEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mbwBU9Vmq7LJiBXVpbnQ4gFX1WarssmILZW51bV9yZXN1bHQAAAAAH/qyYgtqb2JzX3Jlc3VsdABMVjJNB7NiEGtpbmRfbWV0YV9yZXN1bHQAJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZACwqj4nKrNiC2VudW1fcmVzdWx0AABWUScqs2IObW9kdWxlc19yZXN1bHQAAPDnGjWzYgtuZWFyYnlfaW5mbwCAwubkNbNiCHN0cmluZ1tdAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mb6CyyfjRW7NiD3Byb2plY3RlZF9zdGF0ZQAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIBCbl+Fs2ILc2VydmljZV9yb3cAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAFSkTV7Ks2INd29ybWhvbGVfaW5mb5AdnubmqullDHRhc2tfcmVzdWx0cwCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAAAANDS1iQx0YXNrX3Jlc3VsdHMAAAAAAJAMjQx0YXNrX3Jlc3VsdHMAAAAquqw2lQx0YXNrX3Jlc3VsdHMAAIhXM+nymgZzdHJpbmcAAGXXIIVMrAx0YXNrX3Jlc3VsdHMAfHZ5KoVMrAx0YXNrX3Jlc3VsdHMAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAQIxG7UixuhJyZXNvbHZlYWxsX3Jlc3VsdHMAAABAxZx1wwx0YXNrX3Jlc3VsdHMAAKDsGsRpxgx0YXNrX3Jlc3VsdHMAgM8uT8Vpxgx0YXNrX3Jlc3VsdHMAAAAqulwNxwx0YXNrX3Jlc3VsdHMAAAAgOzzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAwDSxRrXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAJEPj1Ax0YXNrX3Jlc3VsdHMAAABAJXNZ1Qx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHM=');
444
444
  const abi = ABI.from(abiBlob);
445
445
  var Types;
446
446
  (function (Types) {
@@ -561,6 +561,24 @@ var Types;
561
561
  Struct.type('blend')
562
562
  ], blend);
563
563
  Types.blend = blend;
564
+ let builder_lane = class builder_lane extends Struct {
565
+ };
566
+ __decorate([
567
+ Struct.field(UInt8)
568
+ ], builder_lane.prototype, "slot_index", void 0);
569
+ __decorate([
570
+ Struct.field(UInt16)
571
+ ], builder_lane.prototype, "speed", void 0);
572
+ __decorate([
573
+ Struct.field(UInt32)
574
+ ], builder_lane.prototype, "drain", void 0);
575
+ __decorate([
576
+ Struct.field(UInt16)
577
+ ], builder_lane.prototype, "output_pct", void 0);
578
+ builder_lane = __decorate([
579
+ Struct.type('builder_lane')
580
+ ], builder_lane);
581
+ Types.builder_lane = builder_lane;
564
582
  let buildplot = class buildplot extends Struct {
565
583
  };
566
584
  __decorate([
@@ -624,6 +642,18 @@ var Types;
624
642
  Struct.type('cancel_results')
625
643
  ], cancel_results);
626
644
  Types.cancel_results = cancel_results;
645
+ let canceljob = class canceljob extends Struct {
646
+ };
647
+ __decorate([
648
+ Struct.field(UInt64)
649
+ ], canceljob.prototype, "job_id", void 0);
650
+ __decorate([
651
+ Struct.field(UInt64)
652
+ ], canceljob.prototype, "ship_id", void 0);
653
+ canceljob = __decorate([
654
+ Struct.type('canceljob')
655
+ ], canceljob);
656
+ Types.canceljob = canceljob;
627
657
  let cargo_row = class cargo_row extends Struct {
628
658
  };
629
659
  __decorate([
@@ -675,6 +705,15 @@ var Types;
675
705
  Struct.type('cargo_view')
676
706
  ], cargo_view);
677
707
  Types.cargo_view = cargo_view;
708
+ let civicconfig_row = class civicconfig_row extends Struct {
709
+ };
710
+ __decorate([
711
+ Struct.field(Name)
712
+ ], civicconfig_row.prototype, "civic_owner", void 0);
713
+ civicconfig_row = __decorate([
714
+ Struct.type('civicconfig_row')
715
+ ], civicconfig_row);
716
+ Types.civicconfig_row = civicconfig_row;
678
717
  let claim_row = class claim_row extends Struct {
679
718
  };
680
719
  __decorate([
@@ -684,6 +723,18 @@ var Types;
684
723
  Struct.type('claim_row')
685
724
  ], claim_row);
686
725
  Types.claim_row = claim_row;
726
+ let claimjob = class claimjob extends Struct {
727
+ };
728
+ __decorate([
729
+ Struct.field(UInt64)
730
+ ], claimjob.prototype, "job_id", void 0);
731
+ __decorate([
732
+ Struct.field(UInt64)
733
+ ], claimjob.prototype, "ship_id", void 0);
734
+ claimjob = __decorate([
735
+ Struct.type('claimjob')
736
+ ], claimjob);
737
+ Types.claimjob = claimjob;
687
738
  let cluster_slot = class cluster_slot extends Struct {
688
739
  };
689
740
  __decorate([
@@ -882,6 +933,21 @@ var Types;
882
933
  Struct.type('coordinates')
883
934
  ], coordinates);
884
935
  Types.coordinates = coordinates;
936
+ let coupling = class coupling extends Struct {
937
+ };
938
+ __decorate([
939
+ Struct.field(entity_ref)
940
+ ], coupling.prototype, "counterpart", void 0);
941
+ __decorate([
942
+ Struct.field(UInt64)
943
+ ], coupling.prototype, "hold", void 0);
944
+ __decorate([
945
+ Struct.field(UInt8)
946
+ ], coupling.prototype, "kind", void 0);
947
+ coupling = __decorate([
948
+ Struct.type('coupling')
949
+ ], coupling);
950
+ Types.coupling = coupling;
885
951
  let craft = class craft extends Struct {
886
952
  };
887
953
  __decorate([
@@ -924,6 +990,39 @@ var Types;
924
990
  Struct.type('crafter_lane')
925
991
  ], crafter_lane);
926
992
  Types.crafter_lane = crafter_lane;
993
+ let craftjob = class craftjob extends Struct {
994
+ };
995
+ __decorate([
996
+ Struct.field(UInt64)
997
+ ], craftjob.prototype, "ship_id", void 0);
998
+ __decorate([
999
+ Struct.field(UInt64)
1000
+ ], craftjob.prototype, "workshop_id", void 0);
1001
+ __decorate([
1002
+ Struct.field(UInt8)
1003
+ ], craftjob.prototype, "slot", void 0);
1004
+ __decorate([
1005
+ Struct.field(UInt16)
1006
+ ], craftjob.prototype, "recipe_id", void 0);
1007
+ __decorate([
1008
+ Struct.field(UInt32)
1009
+ ], craftjob.prototype, "quantity", void 0);
1010
+ __decorate([
1011
+ Struct.field(cargo_item, { array: true })
1012
+ ], craftjob.prototype, "inputs", void 0);
1013
+ craftjob = __decorate([
1014
+ Struct.type('craftjob')
1015
+ ], craftjob);
1016
+ Types.craftjob = craftjob;
1017
+ let delentity = class delentity extends Struct {
1018
+ };
1019
+ __decorate([
1020
+ Struct.field(UInt64)
1021
+ ], delentity.prototype, "entity_id", void 0);
1022
+ delentity = __decorate([
1023
+ Struct.type('delentity')
1024
+ ], delentity);
1025
+ Types.delentity = delentity;
927
1026
  let demolish = class demolish extends Struct {
928
1027
  };
929
1028
  __decorate([
@@ -1121,18 +1220,18 @@ var Types;
1121
1220
  __decorate([
1122
1221
  Struct.field(cargo_item, { array: true })
1123
1222
  ], task.prototype, "cargo", void 0);
1223
+ __decorate([
1224
+ Struct.field(coupling, { array: true })
1225
+ ], task.prototype, "couplings", void 0);
1124
1226
  __decorate([
1125
1227
  Struct.field(entity_ref, { optional: true })
1126
- ], task.prototype, "entitytarget", void 0);
1228
+ ], task.prototype, "subject", void 0);
1127
1229
  __decorate([
1128
1230
  Struct.field(UInt64, { optional: true })
1129
1231
  ], task.prototype, "entitygroup", void 0);
1130
1232
  __decorate([
1131
1233
  Struct.field(UInt32, { optional: true })
1132
1234
  ], task.prototype, "energy_cost", void 0);
1133
- __decorate([
1134
- Struct.field(UInt64, { optional: true })
1135
- ], task.prototype, "hold", void 0);
1136
1235
  __decorate([
1137
1236
  Struct.field(UInt16, { optional: true })
1138
1237
  ], task.prototype, "target_item_id", void 0);
@@ -1241,6 +1340,9 @@ var Types;
1241
1340
  __decorate([
1242
1341
  Struct.field(crafter_lane, { array: true })
1243
1342
  ], entity_info.prototype, "crafter_lanes", void 0);
1343
+ __decorate([
1344
+ Struct.field(builder_lane, { array: true })
1345
+ ], entity_info.prototype, "builder_lanes", void 0);
1244
1346
  __decorate([
1245
1347
  Struct.field(loader_lane, { array: true })
1246
1348
  ], entity_info.prototype, "loader_lanes", void 0);
@@ -1280,6 +1382,9 @@ var Types;
1280
1382
  __decorate([
1281
1383
  Struct.field(slot_def, { array: true })
1282
1384
  ], entity_layout.prototype, "slots", void 0);
1385
+ __decorate([
1386
+ Struct.field(UInt32)
1387
+ ], entity_layout.prototype, "base_hullmass", void 0);
1283
1388
  entity_layout = __decorate([
1284
1389
  Struct.type('entity_layout')
1285
1390
  ], entity_layout);
@@ -1383,7 +1488,7 @@ var Types;
1383
1488
  Struct.field(Name)
1384
1489
  ], entity_task_info.prototype, "entity_type", void 0);
1385
1490
  __decorate([
1386
- Struct.field(UInt8)
1491
+ Struct.field(UInt32)
1387
1492
  ], entity_task_info.prototype, "task_count", void 0);
1388
1493
  __decorate([
1389
1494
  Struct.field(TimePoint)
@@ -1503,6 +1608,30 @@ var Types;
1503
1608
  Struct.type('gather')
1504
1609
  ], gather);
1505
1610
  Types.gather = gather;
1611
+ let gatherplan = class gatherplan extends Struct {
1612
+ };
1613
+ __decorate([
1614
+ Struct.field(UInt64)
1615
+ ], gatherplan.prototype, "source_id", void 0);
1616
+ __decorate([
1617
+ Struct.field(UInt64)
1618
+ ], gatherplan.prototype, "destination_id", void 0);
1619
+ __decorate([
1620
+ Struct.field(UInt16)
1621
+ ], gatherplan.prototype, "stratum", void 0);
1622
+ __decorate([
1623
+ Struct.field(UInt32)
1624
+ ], gatherplan.prototype, "quantity", void 0);
1625
+ __decorate([
1626
+ Struct.field('bool')
1627
+ ], gatherplan.prototype, "recharge", void 0);
1628
+ __decorate([
1629
+ Struct.field(Bytes)
1630
+ ], gatherplan.prototype, "slots", void 0);
1631
+ gatherplan = __decorate([
1632
+ Struct.type('gatherplan')
1633
+ ], gatherplan);
1634
+ Types.gatherplan = gatherplan;
1506
1635
  let genesisfleet = class genesisfleet extends Struct {
1507
1636
  };
1508
1637
  __decorate([
@@ -1638,6 +1767,15 @@ var Types;
1638
1767
  Struct.type('getitemtypes')
1639
1768
  ], getitemtypes);
1640
1769
  Types.getitemtypes = getitemtypes;
1770
+ let getjobs = class getjobs extends Struct {
1771
+ };
1772
+ __decorate([
1773
+ Struct.field(UInt64)
1774
+ ], getjobs.prototype, "workshop_id", void 0);
1775
+ getjobs = __decorate([
1776
+ Struct.type('getjobs')
1777
+ ], getjobs);
1778
+ Types.getjobs = getjobs;
1641
1779
  let getkindmeta = class getkindmeta extends Struct {
1642
1780
  };
1643
1781
  getkindmeta = __decorate([
@@ -1770,6 +1908,15 @@ var Types;
1770
1908
  Struct.type('getresources')
1771
1909
  ], getresources);
1772
1910
  Types.getresources = getresources;
1911
+ let getservice = class getservice extends Struct {
1912
+ };
1913
+ __decorate([
1914
+ Struct.field(UInt64)
1915
+ ], getservice.prototype, "workshop_id", void 0);
1916
+ getservice = __decorate([
1917
+ Struct.type('getservice')
1918
+ ], getservice);
1919
+ Types.getservice = getservice;
1773
1920
  let getslots = class getslots extends Struct {
1774
1921
  };
1775
1922
  getslots = __decorate([
@@ -1881,6 +2028,24 @@ var Types;
1881
2028
  Struct.type('importcargo')
1882
2029
  ], importcargo);
1883
2030
  Types.importcargo = importcargo;
2031
+ let importcell = class importcell extends Struct {
2032
+ };
2033
+ __decorate([
2034
+ Struct.field(UInt64)
2035
+ ], importcell.prototype, "root", void 0);
2036
+ __decorate([
2037
+ Struct.field(Int8)
2038
+ ], importcell.prototype, "gx", void 0);
2039
+ __decorate([
2040
+ Struct.field(Int8)
2041
+ ], importcell.prototype, "gy", void 0);
2042
+ __decorate([
2043
+ Struct.field(UInt64)
2044
+ ], importcell.prototype, "entity_id", void 0);
2045
+ importcell = __decorate([
2046
+ Struct.type('importcell')
2047
+ ], importcell);
2048
+ Types.importcell = importcell;
1884
2049
  let importentity = class importentity extends Struct {
1885
2050
  };
1886
2051
  __decorate([
@@ -2091,6 +2256,72 @@ var Types;
2091
2256
  Struct.type('items_info')
2092
2257
  ], items_info);
2093
2258
  Types.items_info = items_info;
2259
+ let job_receipt = class job_receipt extends Struct {
2260
+ };
2261
+ __decorate([
2262
+ Struct.field(UInt64)
2263
+ ], job_receipt.prototype, "job_id", void 0);
2264
+ __decorate([
2265
+ Struct.field(TimePoint)
2266
+ ], job_receipt.prototype, "starts_at", void 0);
2267
+ __decorate([
2268
+ Struct.field(TimePoint)
2269
+ ], job_receipt.prototype, "completes_at", void 0);
2270
+ job_receipt = __decorate([
2271
+ Struct.type('job_receipt')
2272
+ ], job_receipt);
2273
+ Types.job_receipt = job_receipt;
2274
+ let job_row = class job_row extends Struct {
2275
+ };
2276
+ __decorate([
2277
+ Struct.field(UInt64)
2278
+ ], job_row.prototype, "id", void 0);
2279
+ __decorate([
2280
+ Struct.field(UInt64)
2281
+ ], job_row.prototype, "workshop", void 0);
2282
+ __decorate([
2283
+ Struct.field(UInt8)
2284
+ ], job_row.prototype, "socket", void 0);
2285
+ __decorate([
2286
+ Struct.field(Name)
2287
+ ], job_row.prototype, "owner", void 0);
2288
+ __decorate([
2289
+ Struct.field(UInt64)
2290
+ ], job_row.prototype, "ship_id", void 0);
2291
+ __decorate([
2292
+ Struct.field(coordinates)
2293
+ ], job_row.prototype, "coords", void 0);
2294
+ __decorate([
2295
+ Struct.field(TimePoint)
2296
+ ], job_row.prototype, "starts_at", void 0);
2297
+ __decorate([
2298
+ Struct.field(TimePoint)
2299
+ ], job_row.prototype, "completes_at", void 0);
2300
+ __decorate([
2301
+ Struct.field(UInt16)
2302
+ ], job_row.prototype, "recipe_id", void 0);
2303
+ __decorate([
2304
+ Struct.field(UInt32)
2305
+ ], job_row.prototype, "quantity", void 0);
2306
+ __decorate([
2307
+ Struct.field(UInt32)
2308
+ ], job_row.prototype, "energy_paid", void 0);
2309
+ __decorate([
2310
+ Struct.field(cargo_item, { array: true })
2311
+ ], job_row.prototype, "cargo", void 0);
2312
+ job_row = __decorate([
2313
+ Struct.type('job_row')
2314
+ ], job_row);
2315
+ Types.job_row = job_row;
2316
+ let jobs_result = class jobs_result extends Struct {
2317
+ };
2318
+ __decorate([
2319
+ Struct.field(job_row, { array: true })
2320
+ ], jobs_result.prototype, "jobs", void 0);
2321
+ jobs_result = __decorate([
2322
+ Struct.type('jobs_result')
2323
+ ], jobs_result);
2324
+ Types.jobs_result = jobs_result;
2094
2325
  let join = class join extends Struct {
2095
2326
  };
2096
2327
  __decorate([
@@ -2226,6 +2457,24 @@ var Types;
2226
2457
  Struct.type('location_info')
2227
2458
  ], location_info);
2228
2459
  Types.location_info = location_info;
2460
+ let migratetasks = class migratetasks extends Struct {
2461
+ };
2462
+ __decorate([
2463
+ Struct.field(UInt32)
2464
+ ], migratetasks.prototype, "batch", void 0);
2465
+ migratetasks = __decorate([
2466
+ Struct.type('migratetasks')
2467
+ ], migratetasks);
2468
+ Types.migratetasks = migratetasks;
2469
+ let migswap = class migswap extends Struct {
2470
+ };
2471
+ __decorate([
2472
+ Struct.field(UInt32)
2473
+ ], migswap.prototype, "batch", void 0);
2474
+ migswap = __decorate([
2475
+ Struct.type('migswap')
2476
+ ], migswap);
2477
+ Types.migswap = migswap;
2229
2478
  let module_info = class module_info extends Struct {
2230
2479
  };
2231
2480
  __decorate([
@@ -2579,6 +2828,9 @@ var Types;
2579
2828
  __decorate([
2580
2829
  Struct.field(crafter_lane, { array: true })
2581
2830
  ], projected_state.prototype, "crafter_lanes", void 0);
2831
+ __decorate([
2832
+ Struct.field(builder_lane, { array: true })
2833
+ ], projected_state.prototype, "builder_lanes", void 0);
2582
2834
  __decorate([
2583
2835
  Struct.field(loader_lane, { array: true })
2584
2836
  ], projected_state.prototype, "loader_lanes", void 0);
@@ -2799,6 +3051,36 @@ var Types;
2799
3051
  Struct.type('route_waypoint')
2800
3052
  ], route_waypoint);
2801
3053
  Types.route_waypoint = route_waypoint;
3054
+ let service_socket = class service_socket extends Struct {
3055
+ };
3056
+ __decorate([
3057
+ Struct.field('bool')
3058
+ ], service_socket.prototype, "open", void 0);
3059
+ service_socket = __decorate([
3060
+ Struct.type('service_socket')
3061
+ ], service_socket);
3062
+ Types.service_socket = service_socket;
3063
+ let service_row = class service_row extends Struct {
3064
+ };
3065
+ __decorate([
3066
+ Struct.field(UInt64)
3067
+ ], service_row.prototype, "entity", void 0);
3068
+ __decorate([
3069
+ Struct.field(service_socket, { array: true })
3070
+ ], service_row.prototype, "sockets", void 0);
3071
+ service_row = __decorate([
3072
+ Struct.type('service_row')
3073
+ ], service_row);
3074
+ Types.service_row = service_row;
3075
+ let setcivic = class setcivic extends Struct {
3076
+ };
3077
+ __decorate([
3078
+ Struct.field(Name)
3079
+ ], setcivic.prototype, "account", void 0);
3080
+ setcivic = __decorate([
3081
+ Struct.type('setcivic')
3082
+ ], setcivic);
3083
+ Types.setcivic = setcivic;
2802
3084
  let setcoords = class setcoords extends Struct {
2803
3085
  };
2804
3086
  __decorate([
@@ -2829,6 +3111,21 @@ var Types;
2829
3111
  Struct.type('setnftcfg')
2830
3112
  ], setnftcfg);
2831
3113
  Types.setnftcfg = setnftcfg;
3114
+ let setsocket = class setsocket extends Struct {
3115
+ };
3116
+ __decorate([
3117
+ Struct.field(UInt64)
3118
+ ], setsocket.prototype, "workshop_id", void 0);
3119
+ __decorate([
3120
+ Struct.field(UInt8)
3121
+ ], setsocket.prototype, "slot", void 0);
3122
+ __decorate([
3123
+ Struct.field('bool')
3124
+ ], setsocket.prototype, "open", void 0);
3125
+ setsocket = __decorate([
3126
+ Struct.type('setsocket')
3127
+ ], setsocket);
3128
+ Types.setsocket = setsocket;
2832
3129
  let setthreshold = class setthreshold extends Struct {
2833
3130
  };
2834
3131
  __decorate([
@@ -2865,6 +3162,24 @@ var Types;
2865
3162
  Struct.type('setwrapfee')
2866
3163
  ], setwrapfee);
2867
3164
  Types.setwrapfee = setwrapfee;
3165
+ let shuttle = class shuttle extends Struct {
3166
+ };
3167
+ __decorate([
3168
+ Struct.field(UInt64)
3169
+ ], shuttle.prototype, "carrier", void 0);
3170
+ __decorate([
3171
+ Struct.field(UInt64)
3172
+ ], shuttle.prototype, "from_id", void 0);
3173
+ __decorate([
3174
+ Struct.field(UInt64)
3175
+ ], shuttle.prototype, "to_id", void 0);
3176
+ __decorate([
3177
+ Struct.field(cargo_item, { array: true })
3178
+ ], shuttle.prototype, "items", void 0);
3179
+ shuttle = __decorate([
3180
+ Struct.type('shuttle')
3181
+ ], shuttle);
3182
+ Types.shuttle = shuttle;
2868
3183
  let stowcargo = class stowcargo extends Struct {
2869
3184
  };
2870
3185
  __decorate([
@@ -3033,21 +3348,21 @@ var Types;
3033
3348
  Struct.type('travel')
3034
3349
  ], travel);
3035
3350
  Types.travel = travel;
3036
- let travelroute = class travelroute extends Struct {
3351
+ let travelplan = class travelplan extends Struct {
3037
3352
  };
3038
3353
  __decorate([
3039
3354
  Struct.field(entity_ref, { array: true })
3040
- ], travelroute.prototype, "entities", void 0);
3355
+ ], travelplan.prototype, "entities", void 0);
3041
3356
  __decorate([
3042
3357
  Struct.field(route_waypoint, { array: true })
3043
- ], travelroute.prototype, "waypoints", void 0);
3358
+ ], travelplan.prototype, "waypoints", void 0);
3044
3359
  __decorate([
3045
3360
  Struct.field('bool')
3046
- ], travelroute.prototype, "recharge", void 0);
3047
- travelroute = __decorate([
3048
- Struct.type('travelroute')
3049
- ], travelroute);
3050
- Types.travelroute = travelroute;
3361
+ ], travelplan.prototype, "recharge", void 0);
3362
+ travelplan = __decorate([
3363
+ Struct.type('travelplan')
3364
+ ], travelplan);
3365
+ Types.travelplan = travelplan;
3051
3366
  let types_row = class types_row extends Struct {
3052
3367
  };
3053
3368
  __decorate([
@@ -3183,19 +3498,23 @@ var Types;
3183
3498
  })(Types || (Types = {}));
3184
3499
  const TableMap = {
3185
3500
  cargo: Types.cargo_row,
3501
+ civicconfig: Types.civicconfig_row,
3186
3502
  claims: Types.claim_row,
3187
3503
  cluster: Types.cluster_row,
3188
3504
  commit: Types.commit_row,
3189
3505
  entity: Types.entity_row,
3506
+ 'entity.mig': Types.entity_row,
3190
3507
  entitygroup: Types.entitygroup_row,
3191
3508
  entityseq: Types.entity_seq_row,
3192
3509
  epoch: Types.epoch_row,
3510
+ jobs: Types.job_row,
3193
3511
  nftconfig: Types.nftconfig_row,
3194
3512
  oraclecfg: Types.oracle_config_row,
3195
3513
  oracles: Types.oracle_row,
3196
3514
  player: Types.player_row,
3197
3515
  reserve: Types.reserve_row,
3198
3516
  reveal: Types.reveal_row,
3517
+ service: Types.service_row,
3199
3518
  state: Types.state_row,
3200
3519
  types: Types.types_row,
3201
3520
  wrapconfig: Types.wrapconfig_row,
@@ -3316,7 +3635,7 @@ const INSUFFICIENT_BALANCE = 'Insufficient balance.';
3316
3635
  const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
3317
3636
  const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
3318
3637
 
3319
- const PRECISION$1 = 10000;
3638
+ const PRECISION = 10000;
3320
3639
  const CRAFT_ENERGY_DIVISOR = 150000;
3321
3640
  const PLANETARY_STRUCTURE_Z = 0;
3322
3641
  const CONTAINER_Z = 300;
@@ -3338,15 +3657,15 @@ var TaskType;
3338
3657
  TaskType[TaskType["GATHER"] = 5] = "GATHER";
3339
3658
  TaskType[TaskType["WARP"] = 6] = "WARP";
3340
3659
  TaskType[TaskType["CRAFT"] = 7] = "CRAFT";
3341
- TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
3342
3660
  TaskType[TaskType["TRANSIT"] = 9] = "TRANSIT";
3343
3661
  TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
3344
3662
  TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
3663
+ TaskType[TaskType["LAUNCH"] = 12] = "LAUNCH";
3345
3664
  TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
3346
- TaskType[TaskType["CLAIMPLOT"] = 14] = "CLAIMPLOT";
3347
3665
  TaskType[TaskType["BUILDPLOT"] = 15] = "BUILDPLOT";
3348
3666
  TaskType[TaskType["CHARGE"] = 16] = "CHARGE";
3349
3667
  TaskType[TaskType["UPGRADE"] = 17] = "UPGRADE";
3668
+ TaskType[TaskType["SHUTTLE"] = 18] = "SHUTTLE";
3350
3669
  })(TaskType || (TaskType = {}));
3351
3670
  var HoldKind;
3352
3671
  (function (HoldKind) {
@@ -3354,6 +3673,7 @@ var HoldKind;
3354
3673
  HoldKind[HoldKind["PUSH"] = 2] = "PUSH";
3355
3674
  HoldKind[HoldKind["GATHER"] = 3] = "GATHER";
3356
3675
  HoldKind[HoldKind["BUILD"] = 4] = "BUILD";
3676
+ HoldKind[HoldKind["FLIGHT"] = 5] = "FLIGHT";
3357
3677
  HoldKind[HoldKind["UPGRADE"] = 6] = "UPGRADE";
3358
3678
  })(HoldKind || (HoldKind = {}));
3359
3679
  var LocationType;
@@ -3488,6 +3808,7 @@ const ITEM_HAULER_T1 = 10106;
3488
3808
  const ITEM_WARP_T1 = 10107;
3489
3809
  const ITEM_BATTERY_T1 = 10108;
3490
3810
  const ITEM_LAUNCHER_T1 = 10109;
3811
+ const ITEM_BUILDER_T1 = 10110;
3491
3812
  const ITEM_CONTAINER_T1_PACKED = 10200;
3492
3813
  const ITEM_SHIP_T1_PACKED = 10201;
3493
3814
  const ITEM_WAREHOUSE_T1_PACKED = 10202;
@@ -3496,6 +3817,15 @@ const ITEM_FACTORY_T1_PACKED = 10204;
3496
3817
  const ITEM_MASS_DRIVER_T1_PACKED = 10205;
3497
3818
  const ITEM_MASS_CATCHER_T1_PACKED = 10206;
3498
3819
  const ITEM_HUB_T1_PACKED = 10207;
3820
+ const ITEM_WORKSHOP_T1_PACKED = 10208;
3821
+ const ITEM_ROUSTABOUT_T1_PACKED = 10210;
3822
+ const ITEM_PROSPECTOR_T1_PACKED = 10211;
3823
+ const ITEM_TENDER_T1_PACKED = 10212;
3824
+ const ITEM_WRIGHT_T1_PACKED = 10213;
3825
+ const ITEM_TUG_T1_PACKED = 10214;
3826
+ const ITEM_PORTER_T1_PACKED = 10215;
3827
+ const ITEM_WRANGLER_T1_PACKED = 10216;
3828
+ const ITEM_DREDGER_T1_PACKED = 10217;
3499
3829
  const ITEM_PLATE_T2 = 20001;
3500
3830
  const ITEM_FRAME_T2 = 20002;
3501
3831
  const ITEM_PLASMA_CELL_T2 = 20003;
@@ -4299,47 +4629,31 @@ var recipes = [
4299
4629
  ]
4300
4630
  },
4301
4631
  {
4302
- outputItemId: 10200,
4303
- outputMass: 1900000,
4632
+ outputItemId: 10110,
4633
+ outputMass: 960000,
4304
4634
  inputs: [
4305
4635
  {
4306
- itemId: 10001,
4307
- quantity: 600
4636
+ itemId: 10005,
4637
+ quantity: 300
4308
4638
  },
4309
4639
  {
4310
- itemId: 10008,
4311
- quantity: 600
4640
+ itemId: 10002,
4641
+ quantity: 300
4312
4642
  }
4313
4643
  ],
4314
4644
  statSlots: [
4315
- {
4316
- sources: [
4317
- {
4318
- inputIndex: 0,
4319
- statIndex: 0
4320
- }
4321
- ]
4322
- },
4323
- {
4324
- sources: [
4325
- {
4326
- inputIndex: 0,
4327
- statIndex: 1
4328
- }
4329
- ]
4330
- },
4331
4645
  {
4332
4646
  sources: [
4333
4647
  {
4334
4648
  inputIndex: 1,
4335
- statIndex: 0
4649
+ statIndex: 1
4336
4650
  }
4337
4651
  ]
4338
4652
  },
4339
4653
  {
4340
4654
  sources: [
4341
4655
  {
4342
- inputIndex: 1,
4656
+ inputIndex: 0,
4343
4657
  statIndex: 1
4344
4658
  }
4345
4659
  ]
@@ -4349,28 +4663,16 @@ var recipes = [
4349
4663
  ]
4350
4664
  },
4351
4665
  {
4352
- outputItemId: 10201,
4353
- outputMass: 2400000,
4666
+ outputItemId: 10200,
4667
+ outputMass: 1900000,
4354
4668
  inputs: [
4355
4669
  {
4356
4670
  itemId: 10001,
4357
- quantity: 300
4671
+ quantity: 600
4358
4672
  },
4359
4673
  {
4360
4674
  itemId: 10008,
4361
- quantity: 300
4362
- },
4363
- {
4364
- itemId: 10007,
4365
- quantity: 300
4366
- },
4367
- {
4368
- itemId: 10003,
4369
- quantity: 300
4370
- },
4371
- {
4372
- itemId: 10006,
4373
- quantity: 300
4675
+ quantity: 600
4374
4676
  }
4375
4677
  ],
4376
4678
  statSlots: [
@@ -4392,10 +4694,18 @@ var recipes = [
4392
4694
  },
4393
4695
  {
4394
4696
  sources: [
4697
+ {
4698
+ inputIndex: 1,
4699
+ statIndex: 0
4700
+ }
4395
4701
  ]
4396
4702
  },
4397
4703
  {
4398
4704
  sources: [
4705
+ {
4706
+ inputIndex: 1,
4707
+ statIndex: 1
4708
+ }
4399
4709
  ]
4400
4710
  }
4401
4711
  ],
@@ -4567,12 +4877,28 @@ var recipes = [
4567
4877
  ]
4568
4878
  },
4569
4879
  {
4570
- outputItemId: 20001,
4571
- outputMass: 4800,
4880
+ outputItemId: 10210,
4881
+ outputMass: 1600000,
4572
4882
  inputs: [
4573
4883
  {
4574
- itemId: 102,
4575
- quantity: 12
4884
+ itemId: 10001,
4885
+ quantity: 200
4886
+ },
4887
+ {
4888
+ itemId: 10008,
4889
+ quantity: 200
4890
+ },
4891
+ {
4892
+ itemId: 10007,
4893
+ quantity: 200
4894
+ },
4895
+ {
4896
+ itemId: 10003,
4897
+ quantity: 200
4898
+ },
4899
+ {
4900
+ itemId: 10006,
4901
+ quantity: 200
4576
4902
  }
4577
4903
  ],
4578
4904
  statSlots: [
@@ -4587,42 +4913,761 @@ var recipes = [
4587
4913
  {
4588
4914
  sources: [
4589
4915
  {
4590
- inputIndex: 0,
4591
- statIndex: 2
4916
+ inputIndex: 1,
4917
+ statIndex: 0
4592
4918
  }
4593
4919
  ]
4594
4920
  },
4595
4921
  {
4596
4922
  sources: [
4597
4923
  {
4598
- inputIndex: 0,
4599
- statIndex: 1
4924
+ inputIndex: 2,
4925
+ statIndex: 0
4600
4926
  }
4601
4927
  ]
4602
- }
4603
- ],
4604
- blendWeights: [
4605
- ]
4606
- },
4607
- {
4608
- outputItemId: 20002,
4609
- outputMass: 4800,
4610
- inputs: [
4611
- {
4612
- itemId: 402,
4613
- quantity: 6
4614
4928
  },
4615
- {
4616
- itemId: 502,
4617
- quantity: 6
4618
- }
4619
- ],
4620
- statSlots: [
4621
4929
  {
4622
4930
  sources: [
4623
4931
  {
4624
- inputIndex: 0,
4625
- statIndex: 1
4932
+ inputIndex: 3,
4933
+ statIndex: 0
4934
+ }
4935
+ ]
4936
+ },
4937
+ {
4938
+ sources: [
4939
+ {
4940
+ inputIndex: 4,
4941
+ statIndex: 0
4942
+ }
4943
+ ]
4944
+ }
4945
+ ],
4946
+ blendWeights: [
4947
+ ]
4948
+ },
4949
+ {
4950
+ outputItemId: 10211,
4951
+ outputMass: 2400000,
4952
+ inputs: [
4953
+ {
4954
+ itemId: 10005,
4955
+ quantity: 100
4956
+ },
4957
+ {
4958
+ itemId: 10002,
4959
+ quantity: 100
4960
+ },
4961
+ {
4962
+ itemId: 10010,
4963
+ quantity: 100
4964
+ },
4965
+ {
4966
+ itemId: 10009,
4967
+ quantity: 100
4968
+ },
4969
+ {
4970
+ itemId: 10004,
4971
+ quantity: 100
4972
+ },
4973
+ {
4974
+ itemId: 10210,
4975
+ quantity: 1
4976
+ }
4977
+ ],
4978
+ statSlots: [
4979
+ {
4980
+ sources: [
4981
+ {
4982
+ inputIndex: 0,
4983
+ statIndex: 0
4984
+ },
4985
+ {
4986
+ inputIndex: 5,
4987
+ statIndex: 0
4988
+ }
4989
+ ]
4990
+ },
4991
+ {
4992
+ sources: [
4993
+ {
4994
+ inputIndex: 1,
4995
+ statIndex: 0
4996
+ },
4997
+ {
4998
+ inputIndex: 5,
4999
+ statIndex: 1
5000
+ }
5001
+ ]
5002
+ },
5003
+ {
5004
+ sources: [
5005
+ {
5006
+ inputIndex: 2,
5007
+ statIndex: 0
5008
+ },
5009
+ {
5010
+ inputIndex: 5,
5011
+ statIndex: 2
5012
+ }
5013
+ ]
5014
+ },
5015
+ {
5016
+ sources: [
5017
+ {
5018
+ inputIndex: 3,
5019
+ statIndex: 0
5020
+ },
5021
+ {
5022
+ inputIndex: 5,
5023
+ statIndex: 3
5024
+ }
5025
+ ]
5026
+ },
5027
+ {
5028
+ sources: [
5029
+ {
5030
+ inputIndex: 4,
5031
+ statIndex: 0
5032
+ },
5033
+ {
5034
+ inputIndex: 5,
5035
+ statIndex: 4
5036
+ }
5037
+ ]
5038
+ }
5039
+ ],
5040
+ blendWeights: [
5041
+ ],
5042
+ sourceSubclass: 10210
5043
+ },
5044
+ {
5045
+ outputItemId: 10212,
5046
+ outputMass: 2400000,
5047
+ inputs: [
5048
+ {
5049
+ itemId: 10005,
5050
+ quantity: 100
5051
+ },
5052
+ {
5053
+ itemId: 10002,
5054
+ quantity: 100
5055
+ },
5056
+ {
5057
+ itemId: 10010,
5058
+ quantity: 100
5059
+ },
5060
+ {
5061
+ itemId: 10009,
5062
+ quantity: 100
5063
+ },
5064
+ {
5065
+ itemId: 10004,
5066
+ quantity: 100
5067
+ },
5068
+ {
5069
+ itemId: 10210,
5070
+ quantity: 1
5071
+ }
5072
+ ],
5073
+ statSlots: [
5074
+ {
5075
+ sources: [
5076
+ {
5077
+ inputIndex: 0,
5078
+ statIndex: 0
5079
+ },
5080
+ {
5081
+ inputIndex: 5,
5082
+ statIndex: 0
5083
+ }
5084
+ ]
5085
+ },
5086
+ {
5087
+ sources: [
5088
+ {
5089
+ inputIndex: 1,
5090
+ statIndex: 0
5091
+ },
5092
+ {
5093
+ inputIndex: 5,
5094
+ statIndex: 1
5095
+ }
5096
+ ]
5097
+ },
5098
+ {
5099
+ sources: [
5100
+ {
5101
+ inputIndex: 2,
5102
+ statIndex: 0
5103
+ },
5104
+ {
5105
+ inputIndex: 5,
5106
+ statIndex: 2
5107
+ }
5108
+ ]
5109
+ },
5110
+ {
5111
+ sources: [
5112
+ {
5113
+ inputIndex: 3,
5114
+ statIndex: 0
5115
+ },
5116
+ {
5117
+ inputIndex: 5,
5118
+ statIndex: 3
5119
+ }
5120
+ ]
5121
+ },
5122
+ {
5123
+ sources: [
5124
+ {
5125
+ inputIndex: 4,
5126
+ statIndex: 0
5127
+ },
5128
+ {
5129
+ inputIndex: 5,
5130
+ statIndex: 4
5131
+ }
5132
+ ]
5133
+ }
5134
+ ],
5135
+ blendWeights: [
5136
+ ],
5137
+ sourceSubclass: 10210
5138
+ },
5139
+ {
5140
+ outputItemId: 10213,
5141
+ outputMass: 2400000,
5142
+ inputs: [
5143
+ {
5144
+ itemId: 10005,
5145
+ quantity: 100
5146
+ },
5147
+ {
5148
+ itemId: 10002,
5149
+ quantity: 100
5150
+ },
5151
+ {
5152
+ itemId: 10010,
5153
+ quantity: 100
5154
+ },
5155
+ {
5156
+ itemId: 10009,
5157
+ quantity: 100
5158
+ },
5159
+ {
5160
+ itemId: 10004,
5161
+ quantity: 100
5162
+ },
5163
+ {
5164
+ itemId: 10210,
5165
+ quantity: 1
5166
+ }
5167
+ ],
5168
+ statSlots: [
5169
+ {
5170
+ sources: [
5171
+ {
5172
+ inputIndex: 0,
5173
+ statIndex: 0
5174
+ },
5175
+ {
5176
+ inputIndex: 5,
5177
+ statIndex: 0
5178
+ }
5179
+ ]
5180
+ },
5181
+ {
5182
+ sources: [
5183
+ {
5184
+ inputIndex: 1,
5185
+ statIndex: 0
5186
+ },
5187
+ {
5188
+ inputIndex: 5,
5189
+ statIndex: 1
5190
+ }
5191
+ ]
5192
+ },
5193
+ {
5194
+ sources: [
5195
+ {
5196
+ inputIndex: 2,
5197
+ statIndex: 0
5198
+ },
5199
+ {
5200
+ inputIndex: 5,
5201
+ statIndex: 2
5202
+ }
5203
+ ]
5204
+ },
5205
+ {
5206
+ sources: [
5207
+ {
5208
+ inputIndex: 3,
5209
+ statIndex: 0
5210
+ },
5211
+ {
5212
+ inputIndex: 5,
5213
+ statIndex: 3
5214
+ }
5215
+ ]
5216
+ },
5217
+ {
5218
+ sources: [
5219
+ {
5220
+ inputIndex: 4,
5221
+ statIndex: 0
5222
+ },
5223
+ {
5224
+ inputIndex: 5,
5225
+ statIndex: 4
5226
+ }
5227
+ ]
5228
+ }
5229
+ ],
5230
+ blendWeights: [
5231
+ ],
5232
+ sourceSubclass: 10210
5233
+ },
5234
+ {
5235
+ outputItemId: 10214,
5236
+ outputMass: 2400000,
5237
+ inputs: [
5238
+ {
5239
+ itemId: 10005,
5240
+ quantity: 100
5241
+ },
5242
+ {
5243
+ itemId: 10002,
5244
+ quantity: 100
5245
+ },
5246
+ {
5247
+ itemId: 10010,
5248
+ quantity: 100
5249
+ },
5250
+ {
5251
+ itemId: 10009,
5252
+ quantity: 100
5253
+ },
5254
+ {
5255
+ itemId: 10004,
5256
+ quantity: 100
5257
+ },
5258
+ {
5259
+ itemId: 10210,
5260
+ quantity: 1
5261
+ }
5262
+ ],
5263
+ statSlots: [
5264
+ {
5265
+ sources: [
5266
+ {
5267
+ inputIndex: 0,
5268
+ statIndex: 0
5269
+ },
5270
+ {
5271
+ inputIndex: 5,
5272
+ statIndex: 0
5273
+ }
5274
+ ]
5275
+ },
5276
+ {
5277
+ sources: [
5278
+ {
5279
+ inputIndex: 1,
5280
+ statIndex: 0
5281
+ },
5282
+ {
5283
+ inputIndex: 5,
5284
+ statIndex: 1
5285
+ }
5286
+ ]
5287
+ },
5288
+ {
5289
+ sources: [
5290
+ {
5291
+ inputIndex: 2,
5292
+ statIndex: 0
5293
+ },
5294
+ {
5295
+ inputIndex: 5,
5296
+ statIndex: 2
5297
+ }
5298
+ ]
5299
+ },
5300
+ {
5301
+ sources: [
5302
+ {
5303
+ inputIndex: 3,
5304
+ statIndex: 0
5305
+ },
5306
+ {
5307
+ inputIndex: 5,
5308
+ statIndex: 3
5309
+ }
5310
+ ]
5311
+ },
5312
+ {
5313
+ sources: [
5314
+ {
5315
+ inputIndex: 4,
5316
+ statIndex: 0
5317
+ },
5318
+ {
5319
+ inputIndex: 5,
5320
+ statIndex: 4
5321
+ }
5322
+ ]
5323
+ }
5324
+ ],
5325
+ blendWeights: [
5326
+ ],
5327
+ sourceSubclass: 10210
5328
+ },
5329
+ {
5330
+ outputItemId: 10215,
5331
+ outputMass: 2400000,
5332
+ inputs: [
5333
+ {
5334
+ itemId: 10005,
5335
+ quantity: 100
5336
+ },
5337
+ {
5338
+ itemId: 10002,
5339
+ quantity: 100
5340
+ },
5341
+ {
5342
+ itemId: 10010,
5343
+ quantity: 100
5344
+ },
5345
+ {
5346
+ itemId: 10009,
5347
+ quantity: 100
5348
+ },
5349
+ {
5350
+ itemId: 10004,
5351
+ quantity: 100
5352
+ },
5353
+ {
5354
+ itemId: 10210,
5355
+ quantity: 1
5356
+ }
5357
+ ],
5358
+ statSlots: [
5359
+ {
5360
+ sources: [
5361
+ {
5362
+ inputIndex: 0,
5363
+ statIndex: 0
5364
+ },
5365
+ {
5366
+ inputIndex: 5,
5367
+ statIndex: 0
5368
+ }
5369
+ ]
5370
+ },
5371
+ {
5372
+ sources: [
5373
+ {
5374
+ inputIndex: 1,
5375
+ statIndex: 0
5376
+ },
5377
+ {
5378
+ inputIndex: 5,
5379
+ statIndex: 1
5380
+ }
5381
+ ]
5382
+ },
5383
+ {
5384
+ sources: [
5385
+ {
5386
+ inputIndex: 2,
5387
+ statIndex: 0
5388
+ },
5389
+ {
5390
+ inputIndex: 5,
5391
+ statIndex: 2
5392
+ }
5393
+ ]
5394
+ },
5395
+ {
5396
+ sources: [
5397
+ {
5398
+ inputIndex: 3,
5399
+ statIndex: 0
5400
+ },
5401
+ {
5402
+ inputIndex: 5,
5403
+ statIndex: 3
5404
+ }
5405
+ ]
5406
+ },
5407
+ {
5408
+ sources: [
5409
+ {
5410
+ inputIndex: 4,
5411
+ statIndex: 0
5412
+ },
5413
+ {
5414
+ inputIndex: 5,
5415
+ statIndex: 4
5416
+ }
5417
+ ]
5418
+ }
5419
+ ],
5420
+ blendWeights: [
5421
+ ],
5422
+ sourceSubclass: 10210
5423
+ },
5424
+ {
5425
+ outputItemId: 10216,
5426
+ outputMass: 3600000,
5427
+ inputs: [
5428
+ {
5429
+ itemId: 10005,
5430
+ quantity: 150
5431
+ },
5432
+ {
5433
+ itemId: 10002,
5434
+ quantity: 150
5435
+ },
5436
+ {
5437
+ itemId: 10010,
5438
+ quantity: 150
5439
+ },
5440
+ {
5441
+ itemId: 10009,
5442
+ quantity: 150
5443
+ },
5444
+ {
5445
+ itemId: 10004,
5446
+ quantity: 150
5447
+ },
5448
+ {
5449
+ itemId: 10211,
5450
+ quantity: 1
5451
+ }
5452
+ ],
5453
+ statSlots: [
5454
+ {
5455
+ sources: [
5456
+ {
5457
+ inputIndex: 0,
5458
+ statIndex: 0
5459
+ },
5460
+ {
5461
+ inputIndex: 5,
5462
+ statIndex: 0
5463
+ }
5464
+ ]
5465
+ },
5466
+ {
5467
+ sources: [
5468
+ {
5469
+ inputIndex: 1,
5470
+ statIndex: 0
5471
+ },
5472
+ {
5473
+ inputIndex: 5,
5474
+ statIndex: 1
5475
+ }
5476
+ ]
5477
+ },
5478
+ {
5479
+ sources: [
5480
+ {
5481
+ inputIndex: 2,
5482
+ statIndex: 0
5483
+ },
5484
+ {
5485
+ inputIndex: 5,
5486
+ statIndex: 2
5487
+ }
5488
+ ]
5489
+ },
5490
+ {
5491
+ sources: [
5492
+ {
5493
+ inputIndex: 3,
5494
+ statIndex: 0
5495
+ },
5496
+ {
5497
+ inputIndex: 5,
5498
+ statIndex: 3
5499
+ }
5500
+ ]
5501
+ },
5502
+ {
5503
+ sources: [
5504
+ {
5505
+ inputIndex: 4,
5506
+ statIndex: 0
5507
+ },
5508
+ {
5509
+ inputIndex: 5,
5510
+ statIndex: 4
5511
+ }
5512
+ ]
5513
+ }
5514
+ ],
5515
+ blendWeights: [
5516
+ ],
5517
+ sourceSubclass: 10211
5518
+ },
5519
+ {
5520
+ outputItemId: 10217,
5521
+ outputMass: 3600000,
5522
+ inputs: [
5523
+ {
5524
+ itemId: 10005,
5525
+ quantity: 150
5526
+ },
5527
+ {
5528
+ itemId: 10002,
5529
+ quantity: 150
5530
+ },
5531
+ {
5532
+ itemId: 10010,
5533
+ quantity: 150
5534
+ },
5535
+ {
5536
+ itemId: 10009,
5537
+ quantity: 150
5538
+ },
5539
+ {
5540
+ itemId: 10004,
5541
+ quantity: 150
5542
+ },
5543
+ {
5544
+ itemId: 10211,
5545
+ quantity: 1
5546
+ }
5547
+ ],
5548
+ statSlots: [
5549
+ {
5550
+ sources: [
5551
+ {
5552
+ inputIndex: 0,
5553
+ statIndex: 0
5554
+ },
5555
+ {
5556
+ inputIndex: 5,
5557
+ statIndex: 0
5558
+ }
5559
+ ]
5560
+ },
5561
+ {
5562
+ sources: [
5563
+ {
5564
+ inputIndex: 1,
5565
+ statIndex: 0
5566
+ },
5567
+ {
5568
+ inputIndex: 5,
5569
+ statIndex: 1
5570
+ }
5571
+ ]
5572
+ },
5573
+ {
5574
+ sources: [
5575
+ {
5576
+ inputIndex: 2,
5577
+ statIndex: 0
5578
+ },
5579
+ {
5580
+ inputIndex: 5,
5581
+ statIndex: 2
5582
+ }
5583
+ ]
5584
+ },
5585
+ {
5586
+ sources: [
5587
+ {
5588
+ inputIndex: 3,
5589
+ statIndex: 0
5590
+ },
5591
+ {
5592
+ inputIndex: 5,
5593
+ statIndex: 3
5594
+ }
5595
+ ]
5596
+ },
5597
+ {
5598
+ sources: [
5599
+ {
5600
+ inputIndex: 4,
5601
+ statIndex: 0
5602
+ },
5603
+ {
5604
+ inputIndex: 5,
5605
+ statIndex: 4
5606
+ }
5607
+ ]
5608
+ }
5609
+ ],
5610
+ blendWeights: [
5611
+ ],
5612
+ sourceSubclass: 10211
5613
+ },
5614
+ {
5615
+ outputItemId: 20001,
5616
+ outputMass: 4800,
5617
+ inputs: [
5618
+ {
5619
+ itemId: 102,
5620
+ quantity: 12
5621
+ }
5622
+ ],
5623
+ statSlots: [
5624
+ {
5625
+ sources: [
5626
+ {
5627
+ inputIndex: 0,
5628
+ statIndex: 0
5629
+ }
5630
+ ]
5631
+ },
5632
+ {
5633
+ sources: [
5634
+ {
5635
+ inputIndex: 0,
5636
+ statIndex: 2
5637
+ }
5638
+ ]
5639
+ },
5640
+ {
5641
+ sources: [
5642
+ {
5643
+ inputIndex: 0,
5644
+ statIndex: 1
5645
+ }
5646
+ ]
5647
+ }
5648
+ ],
5649
+ blendWeights: [
5650
+ ]
5651
+ },
5652
+ {
5653
+ outputItemId: 20002,
5654
+ outputMass: 4800,
5655
+ inputs: [
5656
+ {
5657
+ itemId: 402,
5658
+ quantity: 6
5659
+ },
5660
+ {
5661
+ itemId: 502,
5662
+ quantity: 6
5663
+ }
5664
+ ],
5665
+ statSlots: [
5666
+ {
5667
+ sources: [
5668
+ {
5669
+ inputIndex: 0,
5670
+ statIndex: 1
4626
5671
  }
4627
5672
  ]
4628
5673
  },
@@ -5166,27 +6211,27 @@ var recipes = [
5166
6211
  outputMass: 3840000,
5167
6212
  inputs: [
5168
6213
  {
5169
- itemId: 20001,
5170
- quantity: 300
6214
+ itemId: 20005,
6215
+ quantity: 150
5171
6216
  },
5172
6217
  {
5173
- itemId: 20008,
5174
- quantity: 300
6218
+ itemId: 20002,
6219
+ quantity: 150
5175
6220
  },
5176
6221
  {
5177
- itemId: 20007,
5178
- quantity: 300
6222
+ itemId: 20010,
6223
+ quantity: 150
5179
6224
  },
5180
6225
  {
5181
- itemId: 20003,
5182
- quantity: 300
6226
+ itemId: 20009,
6227
+ quantity: 150
5183
6228
  },
5184
6229
  {
5185
- itemId: 20006,
5186
- quantity: 300
6230
+ itemId: 20004,
6231
+ quantity: 150
5187
6232
  },
5188
6233
  {
5189
- itemId: 10201,
6234
+ itemId: 10211,
5190
6235
  quantity: 1
5191
6236
  }
5192
6237
  ],
@@ -5206,8 +6251,8 @@ var recipes = [
5206
6251
  {
5207
6252
  sources: [
5208
6253
  {
5209
- inputIndex: 0,
5210
- statIndex: 1
6254
+ inputIndex: 1,
6255
+ statIndex: 0
5211
6256
  },
5212
6257
  {
5213
6258
  inputIndex: 5,
@@ -5217,207 +6262,484 @@ var recipes = [
5217
6262
  },
5218
6263
  {
5219
6264
  sources: [
6265
+ {
6266
+ inputIndex: 2,
6267
+ statIndex: 0
6268
+ },
6269
+ {
6270
+ inputIndex: 5,
6271
+ statIndex: 2
6272
+ }
6273
+ ]
6274
+ },
6275
+ {
6276
+ sources: [
6277
+ {
6278
+ inputIndex: 3,
6279
+ statIndex: 0
6280
+ },
6281
+ {
6282
+ inputIndex: 5,
6283
+ statIndex: 3
6284
+ }
5220
6285
  ]
5221
6286
  },
5222
6287
  {
5223
6288
  sources: [
6289
+ {
6290
+ inputIndex: 4,
6291
+ statIndex: 0
6292
+ },
6293
+ {
6294
+ inputIndex: 5,
6295
+ statIndex: 4
6296
+ }
5224
6297
  ]
5225
6298
  }
5226
6299
  ],
5227
6300
  blendWeights: [
5228
6301
  ],
5229
- sourceSubclass: 10201
6302
+ sourceSubclass: 10211
5230
6303
  },
5231
6304
  {
5232
6305
  outputItemId: 20211,
5233
6306
  outputMass: 3840000,
5234
6307
  inputs: [
5235
6308
  {
5236
- itemId: 20001,
5237
- quantity: 300
6309
+ itemId: 20005,
6310
+ quantity: 150
5238
6311
  },
5239
6312
  {
5240
6313
  itemId: 20002,
5241
- quantity: 300
6314
+ quantity: 150
5242
6315
  },
5243
6316
  {
5244
- itemId: 20008,
5245
- quantity: 300
6317
+ itemId: 20010,
6318
+ quantity: 150
5246
6319
  },
5247
6320
  {
5248
- itemId: 20010,
5249
- quantity: 300
6321
+ itemId: 20009,
6322
+ quantity: 150
5250
6323
  },
5251
6324
  {
5252
6325
  itemId: 20004,
5253
- quantity: 300
6326
+ quantity: 150
6327
+ },
6328
+ {
6329
+ itemId: 10214,
6330
+ quantity: 1
6331
+ }
6332
+ ],
6333
+ statSlots: [
6334
+ {
6335
+ sources: [
6336
+ {
6337
+ inputIndex: 0,
6338
+ statIndex: 0
6339
+ },
6340
+ {
6341
+ inputIndex: 5,
6342
+ statIndex: 0
6343
+ }
6344
+ ]
6345
+ },
6346
+ {
6347
+ sources: [
6348
+ {
6349
+ inputIndex: 1,
6350
+ statIndex: 0
6351
+ },
6352
+ {
6353
+ inputIndex: 5,
6354
+ statIndex: 1
6355
+ }
6356
+ ]
6357
+ },
6358
+ {
6359
+ sources: [
6360
+ {
6361
+ inputIndex: 2,
6362
+ statIndex: 0
6363
+ },
6364
+ {
6365
+ inputIndex: 5,
6366
+ statIndex: 2
6367
+ }
6368
+ ]
6369
+ },
6370
+ {
6371
+ sources: [
6372
+ {
6373
+ inputIndex: 3,
6374
+ statIndex: 0
6375
+ },
6376
+ {
6377
+ inputIndex: 5,
6378
+ statIndex: 3
6379
+ }
6380
+ ]
6381
+ },
6382
+ {
6383
+ sources: [
6384
+ {
6385
+ inputIndex: 4,
6386
+ statIndex: 0
6387
+ },
6388
+ {
6389
+ inputIndex: 5,
6390
+ statIndex: 4
6391
+ }
6392
+ ]
6393
+ }
6394
+ ],
6395
+ blendWeights: [
6396
+ ],
6397
+ sourceSubclass: 10214
6398
+ }
6399
+ ];
6400
+
6401
+ var entities = [
6402
+ {
6403
+ entityItemId: 10200,
6404
+ slots: [
6405
+ ],
6406
+ baseHullmass: 100000
6407
+ },
6408
+ {
6409
+ entityItemId: 10201,
6410
+ slots: [
6411
+ {
6412
+ type: "any",
6413
+ outputPct: 80,
6414
+ maxTier: 1
6415
+ },
6416
+ {
6417
+ type: "any",
6418
+ outputPct: 80,
6419
+ maxTier: 1
6420
+ },
6421
+ {
6422
+ type: "any",
6423
+ outputPct: 80,
6424
+ maxTier: 1
6425
+ },
6426
+ {
6427
+ type: "any",
6428
+ outputPct: 80,
6429
+ maxTier: 1
6430
+ },
6431
+ {
6432
+ type: "any",
6433
+ outputPct: 80,
6434
+ maxTier: 1
6435
+ }
6436
+ ],
6437
+ baseHullmass: 4000000
6438
+ },
6439
+ {
6440
+ entityItemId: 10202,
6441
+ slots: [
6442
+ {
6443
+ type: "loader",
6444
+ outputPct: 100,
6445
+ maxTier: 1
6446
+ },
6447
+ {
6448
+ type: "storage",
6449
+ outputPct: 100,
6450
+ maxTier: 1
6451
+ },
6452
+ {
6453
+ type: "storage",
6454
+ outputPct: 100,
6455
+ maxTier: 1
6456
+ },
6457
+ {
6458
+ type: "storage",
6459
+ outputPct: 100,
6460
+ maxTier: 1
6461
+ },
6462
+ {
6463
+ type: "storage",
6464
+ outputPct: 100,
6465
+ maxTier: 1
6466
+ }
6467
+ ],
6468
+ baseHullmass: 100000
6469
+ },
6470
+ {
6471
+ entityItemId: 10203,
6472
+ slots: [
6473
+ {
6474
+ type: "generator",
6475
+ outputPct: 200,
6476
+ maxTier: 1
6477
+ },
6478
+ {
6479
+ type: "gatherer",
6480
+ outputPct: 200,
6481
+ maxTier: 1
6482
+ }
6483
+ ],
6484
+ baseHullmass: 100000
6485
+ },
6486
+ {
6487
+ entityItemId: 10204,
6488
+ slots: [
6489
+ {
6490
+ type: "generator",
6491
+ outputPct: 200,
6492
+ maxTier: 1
6493
+ },
6494
+ {
6495
+ type: "crafter",
6496
+ outputPct: 200,
6497
+ maxTier: 1
6498
+ }
6499
+ ],
6500
+ baseHullmass: 100000
6501
+ },
6502
+ {
6503
+ entityItemId: 10205,
6504
+ slots: [
6505
+ {
6506
+ type: "generator",
6507
+ outputPct: 200,
6508
+ maxTier: 1
6509
+ },
6510
+ {
6511
+ type: "launcher",
6512
+ outputPct: 200,
6513
+ maxTier: 1
6514
+ }
6515
+ ],
6516
+ baseHullmass: 100000
6517
+ },
6518
+ {
6519
+ entityItemId: 10206,
6520
+ slots: [
6521
+ {
6522
+ type: "storage",
6523
+ outputPct: 100,
6524
+ maxTier: 1
6525
+ },
6526
+ {
6527
+ type: "storage",
6528
+ outputPct: 100,
6529
+ maxTier: 1
5254
6530
  },
5255
6531
  {
5256
- itemId: 10201,
5257
- quantity: 1
6532
+ type: "storage",
6533
+ outputPct: 100,
6534
+ maxTier: 1
5258
6535
  }
5259
6536
  ],
5260
- statSlots: [
6537
+ baseHullmass: 100000
6538
+ },
6539
+ {
6540
+ entityItemId: 10207,
6541
+ slots: [
6542
+ ],
6543
+ baseHullmass: 100000
6544
+ },
6545
+ {
6546
+ entityItemId: 10208,
6547
+ slots: [
5261
6548
  {
5262
- sources: [
5263
- {
5264
- inputIndex: 0,
5265
- statIndex: 0
5266
- },
5267
- {
5268
- inputIndex: 5,
5269
- statIndex: 0
5270
- }
5271
- ]
6549
+ type: "crafter",
6550
+ outputPct: 75,
6551
+ maxTier: 1
5272
6552
  },
5273
6553
  {
5274
- sources: [
5275
- {
5276
- inputIndex: 0,
5277
- statIndex: 1
5278
- },
5279
- {
5280
- inputIndex: 5,
5281
- statIndex: 1
5282
- }
5283
- ]
6554
+ type: "crafter",
6555
+ outputPct: 75,
6556
+ maxTier: 1
5284
6557
  },
5285
6558
  {
5286
- sources: [
5287
- ]
6559
+ type: "crafter",
6560
+ outputPct: 75,
6561
+ maxTier: 1
5288
6562
  },
5289
6563
  {
5290
- sources: [
5291
- ]
6564
+ type: "crafter",
6565
+ outputPct: 75,
6566
+ maxTier: 1
6567
+ },
6568
+ {
6569
+ type: "crafter",
6570
+ outputPct: 75,
6571
+ maxTier: 1
5292
6572
  }
5293
6573
  ],
5294
- blendWeights: [
5295
- ],
5296
- sourceSubclass: 10201
5297
- }
5298
- ];
5299
-
5300
- var entities = [
5301
- {
5302
- entityItemId: 10200,
5303
- slots: [
5304
- ]
6574
+ baseHullmass: 100000
5305
6575
  },
5306
6576
  {
5307
- entityItemId: 10201,
6577
+ entityItemId: 10210,
5308
6578
  slots: [
5309
6579
  {
5310
- type: "any",
6580
+ type: "generator",
5311
6581
  outputPct: 80,
5312
6582
  maxTier: 1
5313
6583
  },
5314
6584
  {
5315
- type: "any",
6585
+ type: "engine",
5316
6586
  outputPct: 80,
5317
6587
  maxTier: 1
5318
6588
  },
5319
6589
  {
5320
6590
  type: "any",
5321
- outputPct: 80,
6591
+ outputPct: 60,
6592
+ maxTier: 1
6593
+ }
6594
+ ],
6595
+ baseHullmass: 3200000
6596
+ },
6597
+ {
6598
+ entityItemId: 10211,
6599
+ slots: [
6600
+ {
6601
+ type: "generator",
6602
+ outputPct: 85,
5322
6603
  maxTier: 1
5323
6604
  },
5324
6605
  {
5325
- type: "any",
5326
- outputPct: 80,
6606
+ type: "engine",
6607
+ outputPct: 85,
5327
6608
  maxTier: 1
5328
6609
  },
5329
6610
  {
5330
- type: "any",
5331
- outputPct: 80,
6611
+ type: "gatherer",
6612
+ outputPct: 100,
5332
6613
  maxTier: 1
5333
6614
  }
5334
- ]
6615
+ ],
6616
+ baseHullmass: 3600000
5335
6617
  },
5336
6618
  {
5337
- entityItemId: 10202,
6619
+ entityItemId: 10212,
5338
6620
  slots: [
5339
6621
  {
5340
- type: "loader",
5341
- outputPct: 100,
6622
+ type: "generator",
6623
+ outputPct: 85,
5342
6624
  maxTier: 1
5343
6625
  },
5344
6626
  {
5345
- type: "storage",
5346
- outputPct: 100,
6627
+ type: "engine",
6628
+ outputPct: 85,
5347
6629
  maxTier: 1
5348
6630
  },
5349
6631
  {
5350
- type: "storage",
6632
+ type: "loader",
5351
6633
  outputPct: 100,
5352
6634
  maxTier: 1
6635
+ }
6636
+ ],
6637
+ baseHullmass: 3600000
6638
+ },
6639
+ {
6640
+ entityItemId: 10213,
6641
+ slots: [
6642
+ {
6643
+ type: "generator",
6644
+ outputPct: 85,
6645
+ maxTier: 1
5353
6646
  },
5354
6647
  {
5355
- type: "storage",
5356
- outputPct: 100,
6648
+ type: "engine",
6649
+ outputPct: 85,
5357
6650
  maxTier: 1
5358
6651
  },
5359
6652
  {
5360
- type: "storage",
6653
+ type: "builder",
5361
6654
  outputPct: 100,
5362
6655
  maxTier: 1
5363
6656
  }
5364
- ]
6657
+ ],
6658
+ baseHullmass: 4400000
5365
6659
  },
5366
6660
  {
5367
- entityItemId: 10203,
6661
+ entityItemId: 10214,
5368
6662
  slots: [
5369
6663
  {
5370
6664
  type: "generator",
5371
- outputPct: 200,
6665
+ outputPct: 85,
5372
6666
  maxTier: 1
5373
6667
  },
5374
6668
  {
5375
- type: "gatherer",
5376
- outputPct: 200,
6669
+ type: "engine",
6670
+ outputPct: 85,
6671
+ maxTier: 1
6672
+ },
6673
+ {
6674
+ type: "hauler",
6675
+ outputPct: 100,
5377
6676
  maxTier: 1
5378
6677
  }
5379
- ]
6678
+ ],
6679
+ baseHullmass: 4400000
5380
6680
  },
5381
6681
  {
5382
- entityItemId: 10204,
6682
+ entityItemId: 10215,
5383
6683
  slots: [
5384
6684
  {
5385
6685
  type: "generator",
5386
- outputPct: 200,
6686
+ outputPct: 85,
5387
6687
  maxTier: 1
5388
6688
  },
5389
6689
  {
5390
- type: "crafter",
5391
- outputPct: 200,
6690
+ type: "engine",
6691
+ outputPct: 85,
6692
+ maxTier: 1
6693
+ },
6694
+ {
6695
+ type: "storage",
6696
+ outputPct: 100,
5392
6697
  maxTier: 1
5393
6698
  }
5394
- ]
6699
+ ],
6700
+ baseHullmass: 5000000
5395
6701
  },
5396
6702
  {
5397
- entityItemId: 10205,
6703
+ entityItemId: 10216,
5398
6704
  slots: [
5399
6705
  {
5400
6706
  type: "generator",
5401
- outputPct: 200,
6707
+ outputPct: 90,
5402
6708
  maxTier: 1
5403
6709
  },
5404
6710
  {
5405
- type: "launcher",
5406
- outputPct: 200,
6711
+ type: "engine",
6712
+ outputPct: 90,
6713
+ maxTier: 1
6714
+ },
6715
+ {
6716
+ type: "gatherer",
6717
+ outputPct: 100,
6718
+ maxTier: 1
6719
+ },
6720
+ {
6721
+ type: "gatherer",
6722
+ outputPct: 100,
5407
6723
  maxTier: 1
5408
6724
  }
5409
- ]
6725
+ ],
6726
+ baseHullmass: 4000000
5410
6727
  },
5411
6728
  {
5412
- entityItemId: 10206,
6729
+ entityItemId: 10217,
5413
6730
  slots: [
5414
6731
  {
5415
- type: "storage",
5416
- outputPct: 100,
6732
+ type: "generator",
6733
+ outputPct: 90,
5417
6734
  maxTier: 1
5418
6735
  },
5419
6736
  {
5420
- type: "storage",
6737
+ type: "engine",
6738
+ outputPct: 90,
6739
+ maxTier: 1
6740
+ },
6741
+ {
6742
+ type: "gatherer",
5421
6743
  outputPct: 100,
5422
6744
  maxTier: 1
5423
6745
  },
@@ -5426,23 +6748,20 @@ var entities = [
5426
6748
  outputPct: 100,
5427
6749
  maxTier: 1
5428
6750
  }
5429
- ]
5430
- },
5431
- {
5432
- entityItemId: 10207,
5433
- slots: [
5434
- ]
6751
+ ],
6752
+ baseHullmass: 4800000
5435
6753
  },
5436
6754
  {
5437
6755
  entityItemId: 20200,
5438
6756
  slots: [
5439
- ]
6757
+ ],
6758
+ baseHullmass: 100000
5440
6759
  },
5441
6760
  {
5442
6761
  entityItemId: 20210,
5443
6762
  slots: [
5444
6763
  {
5445
- type: "engine",
6764
+ type: "generator",
5446
6765
  outputPct: 100,
5447
6766
  maxTier: 2
5448
6767
  },
@@ -5452,7 +6771,7 @@ var entities = [
5452
6771
  maxTier: 2
5453
6772
  },
5454
6773
  {
5455
- type: "gatherer",
6774
+ type: "engine",
5456
6775
  outputPct: 100,
5457
6776
  maxTier: 2
5458
6777
  },
@@ -5460,24 +6779,20 @@ var entities = [
5460
6779
  type: "gatherer",
5461
6780
  outputPct: 100,
5462
6781
  maxTier: 2
5463
- },
5464
- {
5465
- type: "any",
5466
- outputPct: 80,
5467
- maxTier: 1
5468
6782
  }
5469
- ]
6783
+ ],
6784
+ baseHullmass: 5760000
5470
6785
  },
5471
6786
  {
5472
6787
  entityItemId: 20211,
5473
6788
  slots: [
5474
6789
  {
5475
- type: "engine",
6790
+ type: "generator",
5476
6791
  outputPct: 100,
5477
6792
  maxTier: 2
5478
6793
  },
5479
6794
  {
5480
- type: "generator",
6795
+ type: "engine",
5481
6796
  outputPct: 100,
5482
6797
  maxTier: 2
5483
6798
  },
@@ -5491,7 +6806,8 @@ var entities = [
5491
6806
  outputPct: 100,
5492
6807
  maxTier: 2
5493
6808
  }
5494
- ]
6809
+ ],
6810
+ baseHullmass: 7040000
5495
6811
  }
5496
6812
  ];
5497
6813
 
@@ -6016,6 +7332,13 @@ var items = [
6016
7332
  tier: 1,
6017
7333
  subtype: "launcher"
6018
7334
  },
7335
+ {
7336
+ id: 10110,
7337
+ mass: 960000,
7338
+ type: "module",
7339
+ tier: 1,
7340
+ subtype: "builder"
7341
+ },
6019
7342
  {
6020
7343
  id: 10200,
6021
7344
  mass: 1900000,
@@ -6064,6 +7387,60 @@ var items = [
6064
7387
  type: "entity",
6065
7388
  tier: 1
6066
7389
  },
7390
+ {
7391
+ id: 10208,
7392
+ mass: 1900000,
7393
+ type: "entity",
7394
+ tier: 1
7395
+ },
7396
+ {
7397
+ id: 10210,
7398
+ mass: 1600000,
7399
+ type: "entity",
7400
+ tier: 1
7401
+ },
7402
+ {
7403
+ id: 10211,
7404
+ mass: 2400000,
7405
+ type: "entity",
7406
+ tier: 1
7407
+ },
7408
+ {
7409
+ id: 10212,
7410
+ mass: 2400000,
7411
+ type: "entity",
7412
+ tier: 1
7413
+ },
7414
+ {
7415
+ id: 10213,
7416
+ mass: 2400000,
7417
+ type: "entity",
7418
+ tier: 1
7419
+ },
7420
+ {
7421
+ id: 10214,
7422
+ mass: 2400000,
7423
+ type: "entity",
7424
+ tier: 1
7425
+ },
7426
+ {
7427
+ id: 10215,
7428
+ mass: 2400000,
7429
+ type: "entity",
7430
+ tier: 1
7431
+ },
7432
+ {
7433
+ id: 10216,
7434
+ mass: 3600000,
7435
+ type: "entity",
7436
+ tier: 1
7437
+ },
7438
+ {
7439
+ id: 10217,
7440
+ mass: 3600000,
7441
+ type: "entity",
7442
+ tier: 1
7443
+ },
6067
7444
  {
6068
7445
  id: 20001,
6069
7446
  mass: 4800,
@@ -6327,7 +7704,7 @@ const itemMetadata = {
6327
7704
  },
6328
7705
  10106: {
6329
7706
  name: 'Tractor Beam',
6330
- description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
7707
+ description: 'Projects a haul beam to lock onto and transport containers through group travel.',
6331
7708
  color: '#4ADBFF',
6332
7709
  },
6333
7710
  10107: {
@@ -6345,13 +7722,18 @@ const itemMetadata = {
6345
7722
  description: 'Accelerates and launches cargo payloads toward a remote mass catcher.',
6346
7723
  color: '#E86344',
6347
7724
  },
7725
+ 10110: {
7726
+ name: 'Assembly Arm',
7727
+ description: 'Heavy manipulator arms for on-site construction work. Claims build sites, builds them out, and upgrades ships in place.',
7728
+ color: '#FFB347',
7729
+ },
6348
7730
  10200: {
6349
7731
  name: 'Container',
6350
7732
  description: 'Passive floating cargo storage in space. Towed by ships.',
6351
7733
  color: '#7B8D9E',
6352
7734
  },
6353
7735
  10201: {
6354
- name: 'Roustabout',
7736
+ name: 'Ship',
6355
7737
  description: 'General-purpose vessel with 5 module slots.',
6356
7738
  color: '#4AE898',
6357
7739
  },
@@ -6375,15 +7757,60 @@ const itemMetadata = {
6375
7757
  description: 'Planetary launch platform with power core and drive coil module slots.',
6376
7758
  color: '#E86344',
6377
7759
  },
6378
- 10206: {
6379
- name: 'Mass Catcher',
6380
- description: 'Planetary receiving platform with storage module slots; catches launched payloads.',
7760
+ 10206: {
7761
+ name: 'Mass Catcher',
7762
+ description: 'Planetary receiving platform with storage module slots; catches launched payloads.',
7763
+ color: '#4AE898',
7764
+ },
7765
+ 10207: {
7766
+ name: 'Station Hub',
7767
+ description: 'Orbital command structure. Anchors a player station cluster.',
7768
+ color: '#A0B8D0',
7769
+ },
7770
+ 10208: {
7771
+ name: 'Workshop',
7772
+ description: 'A station workshop with five independent workers. Visiting ships bring materials and power, and the workshop does the crafting.',
7773
+ color: '#B877FF',
7774
+ },
7775
+ 10210: {
7776
+ name: 'Roustabout',
7777
+ description: 'A basic starter ship. One engine, one power core, and one open slot to fit as you like.',
7778
+ color: '#4AE898',
7779
+ },
7780
+ 10211: {
7781
+ name: 'Prospector',
7782
+ description: 'A light gathering ship. One engine, one power core, one gathering rig.',
7783
+ color: '#4AE898',
7784
+ },
7785
+ 10212: {
7786
+ name: 'Tender',
7787
+ description: 'A logistics ship with a shuttle bay for moving cargo between ships and stations.',
7788
+ color: '#4AE898',
7789
+ },
7790
+ 10213: {
7791
+ name: 'Wright',
7792
+ description: 'A construction ship with an assembly arm for building structures and upgrading ships.',
7793
+ color: '#4AE898',
7794
+ },
7795
+ 10214: {
7796
+ name: 'Tug',
7797
+ description: 'A logistics ship with a tractor beam for towing containers from place to place.',
7798
+ color: '#4AE898',
7799
+ },
7800
+ 10215: {
7801
+ name: 'Porter',
7802
+ description: 'A cargo ship built around a large storage hold. The extra mass makes it slower than a Roustabout.',
6381
7803
  color: '#4AE898',
6382
7804
  },
6383
- 10207: {
6384
- name: 'Station Hub',
6385
- description: 'Orbital command structure. Anchors a player station cluster.',
6386
- color: '#A0B8D0',
7805
+ 10216: {
7806
+ name: 'Wrangler',
7807
+ description: 'A heavy gathering ship with two gathering rigs, so it mines faster.',
7808
+ color: '#4AE898',
7809
+ },
7810
+ 10217: {
7811
+ name: 'Dredger',
7812
+ description: 'A gathering ship with its own storage hold, so it can keep mining before it has to offload.',
7813
+ color: '#4AE898',
6387
7814
  },
6388
7815
  20001: {
6389
7816
  name: 'Plate',
@@ -6456,13 +7883,21 @@ const itemMetadata = {
6456
7883
  color: '#4AE898',
6457
7884
  },
6458
7885
  20211: {
6459
- name: 'Hauler',
7886
+ name: 'Tug',
6460
7887
  description: 'Advanced towing vessel with tiered engine, generator, and tractor beam slots.',
6461
7888
  color: '#4AE898',
6462
7889
  },
6463
7890
  };
6464
7891
  const entityMetadata = {
6465
7892
  10201: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Shuttle Bay', 'Cargo Hold'] },
7893
+ 10210: { moduleSlotLabels: ['Power Core', 'Engine', 'Utility Bay'] },
7894
+ 10211: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay'] },
7895
+ 10212: { moduleSlotLabels: ['Power Core', 'Engine', 'Shuttle Bay'] },
7896
+ 10213: { moduleSlotLabels: ['Power Core', 'Engine', 'Assembly Arm'] },
7897
+ 10214: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam'] },
7898
+ 10215: { moduleSlotLabels: ['Power Core', 'Engine', 'Cargo Hold'] },
7899
+ 10216: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Limpet Bay'] },
7900
+ 10217: { moduleSlotLabels: ['Power Core', 'Engine', 'Limpet Bay', 'Cargo Hold'] },
6466
7901
  10202: {
6467
7902
  moduleSlotLabels: ['Shuttle Bay', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold', 'Cargo Hold'],
6468
7903
  },
@@ -6470,8 +7905,11 @@ const entityMetadata = {
6470
7905
  10204: { moduleSlotLabels: ['Power Core', 'Fabricator'] },
6471
7906
  10205: { moduleSlotLabels: ['Power Core', 'Drive Coil'] },
6472
7907
  10206: { moduleSlotLabels: ['Cargo Hold', 'Cargo Hold', 'Cargo Hold'] },
6473
- 20210: { moduleSlotLabels: ['Engine', 'Power Core', 'Limpet Bay', 'Limpet Bay', 'Flex Slot'] },
6474
- 20211: { moduleSlotLabels: ['Engine', 'Power Core', 'Tractor Beam', 'Tractor Beam'] },
7908
+ 10208: {
7909
+ moduleSlotLabels: ['Fabricator', 'Fabricator', 'Fabricator', 'Fabricator', 'Fabricator'],
7910
+ },
7911
+ 20210: { moduleSlotLabels: ['Power Core', 'Power Core', 'Engine', 'Limpet Bay'] },
7912
+ 20211: { moduleSlotLabels: ['Power Core', 'Engine', 'Tractor Beam', 'Tractor Beam'] },
6475
7913
  };
6476
7914
  for (const item of items) {
6477
7915
  if (!itemMetadata[item.id]) {
@@ -9362,14 +10800,61 @@ var kinds = [
9362
10800
  capabilityFlags: 4,
9363
10801
  zCoord: 0,
9364
10802
  defaultLabel: "Station Hub"
10803
+ },
10804
+ {
10805
+ kind: "workshop",
10806
+ classification: "OrbitalStructure",
10807
+ capabilityFlags: 20,
10808
+ zCoord: 0,
10809
+ defaultLabel: "Workshop"
9365
10810
  }
9366
10811
  ];
9367
10812
  var templates = [
9368
10813
  {
9369
10814
  itemId: 10201,
9370
10815
  kind: "ship",
10816
+ displayLabel: "Ship"
10817
+ },
10818
+ {
10819
+ itemId: 10210,
10820
+ kind: "ship",
9371
10821
  displayLabel: "Roustabout"
9372
10822
  },
10823
+ {
10824
+ itemId: 10211,
10825
+ kind: "ship",
10826
+ displayLabel: "Prospector"
10827
+ },
10828
+ {
10829
+ itemId: 10212,
10830
+ kind: "ship",
10831
+ displayLabel: "Tender"
10832
+ },
10833
+ {
10834
+ itemId: 10213,
10835
+ kind: "ship",
10836
+ displayLabel: "Wright"
10837
+ },
10838
+ {
10839
+ itemId: 10214,
10840
+ kind: "ship",
10841
+ displayLabel: "Tug"
10842
+ },
10843
+ {
10844
+ itemId: 10215,
10845
+ kind: "ship",
10846
+ displayLabel: "Porter"
10847
+ },
10848
+ {
10849
+ itemId: 10216,
10850
+ kind: "ship",
10851
+ displayLabel: "Wrangler"
10852
+ },
10853
+ {
10854
+ itemId: 10217,
10855
+ kind: "ship",
10856
+ displayLabel: "Dredger"
10857
+ },
9373
10858
  {
9374
10859
  itemId: 10202,
9375
10860
  kind: "warehouse",
@@ -9410,6 +10895,11 @@ var templates = [
9410
10895
  kind: "hub",
9411
10896
  displayLabel: ""
9412
10897
  },
10898
+ {
10899
+ itemId: 10208,
10900
+ kind: "workshop",
10901
+ displayLabel: ""
10902
+ },
9413
10903
  {
9414
10904
  itemId: 20210,
9415
10905
  kind: "ship",
@@ -9418,7 +10908,7 @@ var templates = [
9418
10908
  {
9419
10909
  itemId: 20211,
9420
10910
  kind: "ship",
9421
- displayLabel: "Hauler"
10911
+ displayLabel: "Tug"
9422
10912
  }
9423
10913
  ];
9424
10914
  var kindRegistryJson = {
@@ -9502,6 +10992,7 @@ const ENTITY_SHIP = Name.from('ship');
9502
10992
  const ENTITY_WAREHOUSE = Name.from('warehouse');
9503
10993
  const ENTITY_EXTRACTOR = Name.from('extractor');
9504
10994
  const ENTITY_FACTORY = Name.from('factory');
10995
+ const ENTITY_WORKSHOP = Name.from('workshop');
9505
10996
  const ENTITY_CONTAINER = Name.from('container');
9506
10997
  const ENTITY_NEXUS = Name.from('nexus');
9507
10998
  const ENTITY_PLOT = Name.from('plot');
@@ -9520,6 +11011,9 @@ function isExtractor(entity) {
9520
11011
  function isFactory(entity) {
9521
11012
  return entity.type?.equals(ENTITY_FACTORY) ?? false;
9522
11013
  }
11014
+ function isWorkshop(entity) {
11015
+ return entity.type?.equals(ENTITY_WORKSHOP) ?? false;
11016
+ }
9523
11017
  function isContainer(entity) {
9524
11018
  return entity.type?.equals(ENTITY_CONTAINER) ?? false;
9525
11019
  }
@@ -10001,7 +11495,7 @@ function distanceBetweenCoordinates(origin, destination) {
10001
11495
  function distanceBetweenPoints(x1, y1, x2, y2) {
10002
11496
  const x = (x1 - x2) ** 2;
10003
11497
  const y = (y1 - y2) ** 2;
10004
- return UInt64.from(Math.sqrt(x + y) * PRECISION$1);
11498
+ return UInt64.from(Math.sqrt(x + y) * PRECISION);
10005
11499
  }
10006
11500
  function lerp$1(origin, destination, time) {
10007
11501
  return {
@@ -10047,9 +11541,9 @@ function getInterpolatedPosition(entity, taskIndex, taskProgress) {
10047
11541
  function rotation(origin, destination) {
10048
11542
  return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
10049
11543
  }
10050
- function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION$1) {
11544
+ function findNearbyPlanets(seed, origin, maxDistance = 20 * PRECISION) {
10051
11545
  const nearbySystems = [];
10052
- const max = UInt64.from(maxDistance / PRECISION$1);
11546
+ const max = UInt64.from(maxDistance / PRECISION);
10053
11547
  const xMin = Int64.from(origin.x).subtracting(max);
10054
11548
  const xMax = Int64.from(origin.x).adding(max);
10055
11549
  const yMin = Int64.from(origin.y).subtracting(max);
@@ -10081,14 +11575,22 @@ function calc_rechargetime(capacity, energy, recharge) {
10081
11575
  function calc_ship_rechargetime(ship) {
10082
11576
  if (!ship.generator)
10083
11577
  return UInt32.from(0);
10084
- return calc_rechargetime(ship.generator.capacity, ship.energy ?? UInt16.from(0), ship.generator.recharge);
11578
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? UInt32.from(0), ship.generator.recharge);
10085
11579
  }
10086
11580
  function calc_flighttime(distance, acceleration) {
10087
11581
  return UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
10088
11582
  }
11583
+ function calc_travel_flighttime(distance, acceleration) {
11584
+ const cruiseTransitionDistance = 2 * PRECISION;
11585
+ if (Number(distance) <= cruiseTransitionDistance) {
11586
+ return calc_flighttime(distance, acceleration);
11587
+ }
11588
+ const cruiseVelocity = Math.sqrt(acceleration * cruiseTransitionDistance);
11589
+ return UInt32.from(Number(distance) / cruiseVelocity + cruiseVelocity / acceleration);
11590
+ }
10089
11591
  function calc_transit_duration(ax, ay, bx, by) {
10090
11592
  const distance = distanceBetweenPoints(ax, ay, bx, by);
10091
- return UInt32.from(Math.floor(distance.toNumber() / (PRECISION$1 * WH.TRANSIT_SPEED)));
11593
+ return UInt32.from(Math.floor(distance.toNumber() / (PRECISION * WH.TRANSIT_SPEED)));
10092
11594
  }
10093
11595
  function shipLoaderLane(ship) {
10094
11596
  const lanes = ship.loader_lanes ?? [];
@@ -10112,14 +11614,14 @@ function calc_loader_acceleration(ship, mass) {
10112
11614
  }
10113
11615
  function calc_ship_flighttime(ship, mass, distance) {
10114
11616
  const acceleration = calc_ship_acceleration(ship, mass);
10115
- return calc_flighttime(distance, acceleration);
11617
+ return calc_travel_flighttime(distance, acceleration);
10116
11618
  }
10117
11619
  function calc_ship_acceleration(ship, mass) {
10118
11620
  const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
10119
11621
  return calc_acceleration(thrust, Number(mass));
10120
11622
  }
10121
11623
  function calc_acceleration(thrust, mass) {
10122
- return (thrust / mass) * PRECISION$1;
11624
+ return (thrust / mass) * PRECISION;
10123
11625
  }
10124
11626
  function calc_ship_mass(ship, cargos) {
10125
11627
  const mass = UInt64.from(0);
@@ -10145,10 +11647,10 @@ function calc_group_flighttime(totalThrust, haulCount, pooledHaulCap, weightedHa
10145
11647
  effectiveThrust = Math.trunc((totalThrust * 1000) / penaltyMilli);
10146
11648
  }
10147
11649
  const acceleration = calc_acceleration(effectiveThrust, totalMass);
10148
- return calc_flighttime(distance, acceleration);
11650
+ return calc_travel_flighttime(distance, acceleration);
10149
11651
  }
10150
11652
  function calc_energyusage(distance, drain) {
10151
- return UInt64.from(distance).dividing(PRECISION$1).multiplying(drain);
11653
+ return UInt64.from(distance).multiplying(drain).dividing(PRECISION);
10152
11654
  }
10153
11655
  function calculateTransferTime(ship, cargos, quantities) {
10154
11656
  let mass = UInt64.from(0);
@@ -10248,7 +11750,7 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
10248
11750
  function hasEnergyForDistance(ship, distance) {
10249
11751
  if (!ship.engines)
10250
11752
  return false;
10251
- const energyNeeded = UInt64.from(distance).dividing(PRECISION$1).multiplying(ship.engines.drain);
11753
+ const energyNeeded = UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
10252
11754
  return UInt64.from(ship.energy ?? 0).gte(energyNeeded);
10253
11755
  }
10254
11756
  function toNum$1(v) {
@@ -10955,6 +12457,8 @@ function getItemStatKeys(itemId) {
10955
12457
  return [];
10956
12458
  return getStatDefinitions(item.category).map((d) => d.key);
10957
12459
  }
12460
+ if (itemId === ITEM_SHIP_T1_PACKED)
12461
+ return ['strength', 'density', '', ''];
10958
12462
  const recipe = getRecipe(itemId);
10959
12463
  if (!recipe)
10960
12464
  return [];
@@ -11765,6 +13269,7 @@ const MODULE_LAUNCHER = 7;
11765
13269
  const MODULE_STORAGE = 8;
11766
13270
  const MODULE_HAULER = 9;
11767
13271
  const MODULE_BATTERY = 10;
13272
+ const MODULE_BUILDER = 12;
11768
13273
  function moduleAccepts(slotType, moduleType) {
11769
13274
  return slotType === MODULE_ANY || slotType === moduleType;
11770
13275
  }
@@ -11781,6 +13286,8 @@ function getModuleCapabilityType(itemId) {
11781
13286
  return MODULE_LOADER;
11782
13287
  case ITEM_CRAFTER_T1:
11783
13288
  return MODULE_CRAFTER;
13289
+ case ITEM_BUILDER_T1:
13290
+ return MODULE_BUILDER;
11784
13291
  case ITEM_STORAGE_T1:
11785
13292
  return MODULE_STORAGE;
11786
13293
  case ITEM_HAULER_T1:
@@ -11815,6 +13322,8 @@ function moduleSlotTypeToCode(slotType) {
11815
13322
  return MODULE_WARP;
11816
13323
  case 'crafter':
11817
13324
  return MODULE_CRAFTER;
13325
+ case 'builder':
13326
+ return MODULE_BUILDER;
11818
13327
  case 'launcher':
11819
13328
  return MODULE_LAUNCHER;
11820
13329
  case 'storage':
@@ -13458,7 +14967,7 @@ const UINT32_MAX = 4294967295;
13458
14967
  const UINT32_MAX_BIGINT = 4294967295n;
13459
14968
  const UINT32_MOD = 4294967296n;
13460
14969
  const UINT64_MAX = 18446744073709551615n;
13461
- const PRECISION_BIGINT = BigInt(PRECISION$1);
14970
+ const PRECISION_BIGINT = BigInt(PRECISION);
13462
14971
  function toNumber(value) {
13463
14972
  if (typeof value === 'number')
13464
14973
  return Math.trunc(value);
@@ -13507,7 +15016,7 @@ function calcDistance(origin, destination) {
13507
15016
  const b = Coordinates.from(destination);
13508
15017
  const dx = toNumber(a.x) - toNumber(b.x);
13509
15018
  const dy = toNumber(a.y) - toNumber(b.y);
13510
- return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION$1));
15019
+ return BigInt(Math.trunc(Math.sqrt(dx * dx + dy * dy) * PRECISION));
13511
15020
  }
13512
15021
  function calcCargoItemMassUint32(item) {
13513
15022
  let mass = toUint32(BigInt(getItem(item.item_id).mass) * toUint32(toBigInt(item.quantity)));
@@ -13577,10 +15086,10 @@ class ActionsManager extends BaseManager {
13577
15086
  recharge,
13578
15087
  });
13579
15088
  }
13580
- travelroute(entities, waypoints, recharge = true) {
15089
+ travelplan(entities, waypoints, recharge = true) {
13581
15090
  const entityRefs = this.entityRefs(entities);
13582
15091
  const wps = waypoints.map((w) => Types.route_waypoint.from({ x: Int64.from(w.x), y: Int64.from(w.y) }));
13583
- return this.server.action('travelroute', {
15092
+ return this.server.action('travelplan', {
13584
15093
  entities: entityRefs,
13585
15094
  waypoints: wps,
13586
15095
  recharge,
@@ -13667,6 +15176,14 @@ class ActionsManager extends BaseManager {
13667
15176
  items,
13668
15177
  });
13669
15178
  }
15179
+ shuttle(carrierId, fromId, toId, items) {
15180
+ return this.server.action('shuttle', {
15181
+ carrier: UInt64.from(carrierId),
15182
+ from_id: UInt64.from(fromId),
15183
+ to_id: UInt64.from(toId),
15184
+ items,
15185
+ });
15186
+ }
13670
15187
  launch(launcherId, catcherId, items) {
13671
15188
  return this.server.action('launch', {
13672
15189
  launcher_id: UInt64.from(launcherId),
@@ -13715,26 +15232,16 @@ class ActionsManager extends BaseManager {
13715
15232
  }
13716
15233
  return this.server.action('gather', params);
13717
15234
  }
13718
- bundleGather(gathers) {
13719
- const actions = gathers.map(({ sourceId, destinationId, stratum, quantity, slot }) => this.gather(sourceId, destinationId, stratum, quantity, slot));
13720
- return Transaction.from({
13721
- expiration: 0,
13722
- ref_block_num: 0,
13723
- ref_block_prefix: 0,
13724
- actions,
15235
+ gatherplan(sourceId, destinationId, stratum, quantity, recharge = true, slots = []) {
15236
+ return this.server.action('gatherplan', {
15237
+ source_id: UInt64.from(sourceId),
15238
+ destination_id: UInt64.from(destinationId),
15239
+ stratum: UInt16.from(stratum),
15240
+ quantity: UInt32.from(quantity),
15241
+ recharge,
15242
+ slots: Bytes.from(slots),
13725
15243
  });
13726
15244
  }
13727
- flattenGatherPlan(plan, ctx) {
13728
- const actions = [];
13729
- for (const cycle of plan.cycles) {
13730
- if (cycle.rechargeBefore)
13731
- actions.push(this.recharge(ctx.sourceId));
13732
- for (const limpet of cycle.limpets) {
13733
- actions.push(this.gather(ctx.sourceId, ctx.destinationId, ctx.stratum, limpet.quantity, limpet.slot));
13734
- }
13735
- }
13736
- return actions;
13737
- }
13738
15245
  warp(entityId, destination) {
13739
15246
  const x = Int64.from(destination.x);
13740
15247
  const y = Int64.from(destination.y);
@@ -13759,6 +15266,39 @@ class ActionsManager extends BaseManager {
13759
15266
  }
13760
15267
  return this.server.action('craft', params);
13761
15268
  }
15269
+ craftjob(shipId, workshopId, slot, recipeId, quantity, inputs) {
15270
+ const params = {
15271
+ ship_id: UInt64.from(shipId),
15272
+ workshop_id: UInt64.from(workshopId),
15273
+ slot: UInt8.from(slot),
15274
+ recipe_id: UInt16.from(recipeId),
15275
+ quantity: UInt32.from(quantity),
15276
+ inputs,
15277
+ };
15278
+ return this.server.action('craftjob', params);
15279
+ }
15280
+ claimjob(jobId, shipId) {
15281
+ const params = {
15282
+ job_id: UInt64.from(jobId),
15283
+ ship_id: UInt64.from(shipId),
15284
+ };
15285
+ return this.server.action('claimjob', params);
15286
+ }
15287
+ canceljob(jobId, shipId) {
15288
+ const params = {
15289
+ job_id: UInt64.from(jobId),
15290
+ ship_id: UInt64.from(shipId),
15291
+ };
15292
+ return this.server.action('canceljob', params);
15293
+ }
15294
+ setsocket(workshopId, slot, open) {
15295
+ const params = {
15296
+ workshop_id: UInt64.from(workshopId),
15297
+ slot: UInt8.from(slot),
15298
+ open,
15299
+ };
15300
+ return this.server.action('setsocket', params);
15301
+ }
13762
15302
  blend(entityId, inputs) {
13763
15303
  return this.server.action('blend', {
13764
15304
  id: UInt64.from(entityId),
@@ -14673,6 +16213,15 @@ class Shipload {
14673
16213
  }
14674
16214
  }
14675
16215
 
16216
+ const MODULE_STAT_SCALING_ANCHOR = 213;
16217
+ const MODULE_STAT_SCALING_POST_ANCHOR_PERCENT = 40;
16218
+ function computeEffectiveModuleStat(stat) {
16219
+ if (stat <= MODULE_STAT_SCALING_ANCHOR)
16220
+ return stat;
16221
+ return (MODULE_STAT_SCALING_ANCHOR +
16222
+ Math.floor(((stat - MODULE_STAT_SCALING_ANCHOR) * MODULE_STAT_SCALING_POST_ANCHOR_PERCENT) / 100));
16223
+ }
16224
+
14676
16225
  const U16_MAX = 65535;
14677
16226
  function packedModulesToInstalled(entries) {
14678
16227
  const installed = [];
@@ -14704,13 +16253,27 @@ function getSlotAmp(layout, slotIndex) {
14704
16253
  function idiv(a, b) {
14705
16254
  return Math.floor(a / b);
14706
16255
  }
14707
- function computeBaseHullmass$1(stats) {
16256
+ function toWholeEnergy$1(milli) {
16257
+ return idiv(milli + 500, 1000);
16258
+ }
16259
+ function isShipHull$1(itemId) {
16260
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16261
+ }
16262
+ function sumPackedShipChannels(stats) {
16263
+ let sum = 0;
16264
+ for (let slot = 0; slot < 5; slot++)
16265
+ sum += decodeStat(stats, slot);
16266
+ return sum;
16267
+ }
16268
+ function computeBaseHullmass$1(itemId, stats) {
16269
+ if (isShipHull$1(itemId)) {
16270
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumPackedShipChannels(stats))) / 10000);
16271
+ }
14708
16272
  const density = decodeStat(stats, 1);
14709
- return 100000 - 75 * density;
16273
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - density)) / 2000);
14710
16274
  }
14711
16275
  function computeBaseCapacityShip(stats) {
14712
- const s = decodeStat(stats, 0) + decodeStat(stats, 2);
14713
- return Math.floor(5000000 * 6 ** (s / 1998));
16276
+ return Math.floor(5000000 * 6 ** (sumPackedShipChannels(stats) / 4995));
14714
16277
  }
14715
16278
  function computeBaseCapacityContainer(stats) {
14716
16279
  const s = decodeStat(stats, 0) + decodeStat(stats, 2);
@@ -14722,35 +16285,57 @@ function computeBaseCapacityWarehouse(stats) {
14722
16285
  }
14723
16286
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
14724
16287
  const computeEngineDrain = (thm) => 2 * Math.max(30, 50 - idiv(thm, 70));
14725
- const ENGINE_DRAIN_BASE = 118;
16288
+ const ENGINE_DRAIN_BASE = 156;
14726
16289
  const ENGINE_DRAIN_REF_THRUST = 775;
14727
16290
  const ENGINE_DRAIN_REF_THM = 500;
14728
16291
  const computeTravelDrain = (totalThrust, avgThm) => {
14729
16292
  if (totalThrust <= 0)
14730
16293
  return 0;
14731
- const num = ENGINE_DRAIN_BASE * ENGINE_DRAIN_REF_THRUST * computeEngineDrain(avgThm);
14732
- const den = totalThrust * computeEngineDrain(ENGINE_DRAIN_REF_THM);
14733
- return idiv(num, den);
16294
+ const thermalFactor = computeEngineDrain(avgThm) / computeEngineDrain(ENGINE_DRAIN_REF_THM);
16295
+ const thrustFactor = Math.sqrt(ENGINE_DRAIN_REF_THRUST / totalThrust);
16296
+ return Math.floor(ENGINE_DRAIN_BASE * 1000 * thermalFactor * thrustFactor);
14734
16297
  };
14735
- const computeGeneratorCap = (com) => 1300 + idiv(com, 2);
14736
- const computeGeneratorRech = (fin) => 2 * (1 + idiv(fin * 3, 1000));
16298
+ const computeGeneratorCap = (com) => 1300000 + com * 500;
16299
+ const computeGeneratorRech = (fin) => 2000 + fin * 6;
14737
16300
  const computeGathererYield = (str) => 200 + str;
14738
- const computeGathererDrain = (con) => 2 * Math.max(250, 1250 - idiv(con * 25, 20));
16301
+ const computeGathererDrain = (con) => 2 * Math.max(250000, 1250000 - con * 1250);
14739
16302
  const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
14740
16303
  const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
14741
16304
  const computeLoaderThrust = (pla) => 1 + idiv(pla * pla, 10000);
14742
16305
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
14743
- const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
16306
+ const computeCrafterDrain = (fin) => Math.max(5000, 30000 - idiv(fin * 1000, 33));
16307
+ const computeBuilderSpeed = (coh) => 100 + idiv(coh * 4, 5);
16308
+ const computeBuilderDrain = (tol) => Math.max(5000, 30000 - idiv(tol * 1000, 33));
14744
16309
  const computeHaulerCapacity = (fin, tier) => Math.max(tier, tier + idiv(fin, 400));
14745
16310
  const computeHaulerEfficiency = (con) => 2000 + con * 6;
14746
- const computeHaulerDrain$1 = (com) => Math.max(3, 15 - idiv(com, 80));
16311
+ const supportDrainTierPercent = (tier) => {
16312
+ const clampedTier = Math.min(10, Math.max(1, Math.trunc(tier)));
16313
+ return Math.max(50, 110 - clampedTier * 10);
16314
+ };
16315
+ const computeT1LogisticsDrain = (stat) => Math.max(3000, 15000 - Math.min(12000, idiv(stat * 1000, 80)));
16316
+ const computeHaulerDrain = (conductivity, tier) => idiv(computeT1LogisticsDrain(conductivity) * supportDrainTierPercent(tier), 100);
16317
+ const computeCargoBayDrain = (cohesion, tier) => idiv(computeT1LogisticsDrain(cohesion) * 3 * supportDrainTierPercent(tier), 400);
14747
16318
  const computeWarpRange = (stat) => 100 + stat * 3;
14748
- const computeCargoBayCapacity = (strength, density, hardness, cohesion) => 10000000 + idiv((strength + density + hardness + cohesion) * 50000000, 3996);
14749
- const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500 + idiv((volatility + thermal + plasticity + insulation) * 7500, 3996);
16319
+ const computeCargoBayCapacity = (strength, density, hardness) => 10000000 + idiv((strength + density + hardness) * 50000000, 2997);
16320
+ const computeBatteryBankCapacity = (volatility, thermal, plasticity, insulation) => 2500000 + idiv((volatility + thermal + plasticity + insulation) * 7500000, 3996);
14750
16321
  function entityDisplayName(itemId) {
14751
16322
  switch (itemId) {
14752
16323
  case ITEM_SHIP_T1_PACKED:
16324
+ return 'Ship';
16325
+ case ITEM_ROUSTABOUT_T1_PACKED:
14753
16326
  return 'Roustabout';
16327
+ case ITEM_PROSPECTOR_T1_PACKED:
16328
+ return 'Prospector';
16329
+ case ITEM_TENDER_T1_PACKED:
16330
+ return 'Tender';
16331
+ case ITEM_TUG_T1_PACKED:
16332
+ return 'Tug';
16333
+ case ITEM_PORTER_T1_PACKED:
16334
+ return 'Porter';
16335
+ case ITEM_WRANGLER_T1_PACKED:
16336
+ return 'Wrangler';
16337
+ case ITEM_DREDGER_T1_PACKED:
16338
+ return 'Dredger';
14754
16339
  case ITEM_WAREHOUSE_T1_PACKED:
14755
16340
  return 'Warehouse';
14756
16341
  case ITEM_EXTRACTOR_T1_PACKED:
@@ -14764,7 +16349,7 @@ function entityDisplayName(itemId) {
14764
16349
  case ITEM_PROSPECTOR_T2_PACKED:
14765
16350
  return 'Prospector';
14766
16351
  case ITEM_HAULER_SHIP_T2_PACKED:
14767
- return 'Hauler';
16352
+ return 'Tug';
14768
16353
  default:
14769
16354
  return 'Entity';
14770
16355
  }
@@ -14782,6 +16367,8 @@ function moduleDisplayName(itemId) {
14782
16367
  return 'Shuttle Bay';
14783
16368
  case ITEM_CRAFTER_T1:
14784
16369
  return 'Fabricator';
16370
+ case ITEM_BUILDER_T1:
16371
+ return 'Assembly Arm';
14785
16372
  case ITEM_STORAGE_T1:
14786
16373
  return 'Cargo Hold';
14787
16374
  case ITEM_HAULER_T1:
@@ -14807,15 +16394,15 @@ function formatModuleLine(slot, itemId, stats) {
14807
16394
  const subtype = getModuleCapabilityType(itemId);
14808
16395
  switch (subtype) {
14809
16396
  case MODULE_ENGINE: {
14810
- const vol = decodeStat(stats, 0);
14811
- const thm = decodeStat(stats, 1);
16397
+ const vol = computeEffectiveModuleStat(decodeStat(stats, 0));
16398
+ const thm = computeEffectiveModuleStat(decodeStat(stats, 1));
14812
16399
  out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
14813
16400
  break;
14814
16401
  }
14815
16402
  case MODULE_GENERATOR: {
14816
- const res = decodeStat(stats, 0);
14817
- const ref = decodeStat(stats, 1);
14818
- out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(ref)}`;
16403
+ const res = computeEffectiveModuleStat(decodeStat(stats, 0));
16404
+ const ref = computeEffectiveModuleStat(decodeStat(stats, 1));
16405
+ out += ` Capacity ${toWholeEnergy$1(computeGeneratorCap(res))} Recharge ${toWholeEnergy$1(computeGeneratorRech(ref))}`;
14819
16406
  break;
14820
16407
  }
14821
16408
  case MODULE_GATHERER: {
@@ -14823,7 +16410,7 @@ function formatModuleLine(slot, itemId, stats) {
14823
16410
  const tol = decodeStat(stats, 1);
14824
16411
  const con = decodeStat(stats, 2);
14825
16412
  const tier = getItem(itemId).tier;
14826
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${computeGathererDrain(con)}`;
16413
+ out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Drain ${toWholeEnergy$1(computeGathererDrain(con))}`;
14827
16414
  break;
14828
16415
  }
14829
16416
  case MODULE_LOADER: {
@@ -14835,23 +16422,30 @@ function formatModuleLine(slot, itemId, stats) {
14835
16422
  case MODULE_CRAFTER: {
14836
16423
  const rea = decodeStat(stats, 0);
14837
16424
  const con = decodeStat(stats, 1);
14838
- out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(con)}`;
16425
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${toWholeEnergy$1(computeCrafterDrain(con))}`;
16426
+ break;
16427
+ }
16428
+ case MODULE_BUILDER: {
16429
+ const coh = decodeStat(stats, 0);
16430
+ const tol = decodeStat(stats, 1);
16431
+ out += ` Speed ${computeBuilderSpeed(coh)} Drain ${toWholeEnergy$1(computeBuilderDrain(tol))}`;
14839
16432
  break;
14840
16433
  }
14841
16434
  case MODULE_STORAGE: {
14842
16435
  const str = decodeStat(stats, 0);
14843
16436
  const den = decodeStat(stats, 1);
14844
16437
  const hrd = decodeStat(stats, 2);
14845
- const com = decodeStat(stats, 3);
14846
- out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd, com)}`;
16438
+ const coh = decodeStat(stats, 3);
16439
+ const tier = getItem(itemId).tier;
16440
+ out += ` Cargo Capacity ${computeCargoBayCapacity(str, den, hrd)} Drain ${toWholeEnergy$1(computeCargoBayDrain(coh, tier))}`;
14847
16441
  break;
14848
16442
  }
14849
16443
  case MODULE_HAULER: {
14850
16444
  const res = decodeStat(stats, 0);
14851
16445
  const pla = decodeStat(stats, 1);
14852
- const ref = decodeStat(stats, 2);
16446
+ const con = decodeStat(stats, 2);
14853
16447
  const tier = getItem(itemId).tier;
14854
- out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${computeHaulerDrain$1(ref)}`;
16448
+ out += ` Capacity ${computeHaulerCapacity(res, tier)} Efficiency ${computeHaulerEfficiency(pla)} Drain ${toWholeEnergy$1(computeHaulerDrain(con, tier))}`;
14855
16449
  break;
14856
16450
  }
14857
16451
  case MODULE_WARP: {
@@ -14864,18 +16458,16 @@ function formatModuleLine(slot, itemId, stats) {
14864
16458
  const thm = decodeStat(stats, 1);
14865
16459
  const pla = decodeStat(stats, 2);
14866
16460
  const ins = decodeStat(stats, 3);
14867
- out += ` Energy Capacity ${computeBatteryBankCapacity(vol, thm, pla, ins)}`;
16461
+ out += ` Energy Capacity ${toWholeEnergy$1(computeBatteryBankCapacity(vol, thm, pla, ins))}`;
14868
16462
  break;
14869
16463
  }
14870
16464
  }
14871
16465
  return out;
14872
16466
  }
14873
16467
  function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14874
- const hullMass = computeBaseHullmass$1(hullStats);
16468
+ const hullMass = computeBaseHullmass$1(itemId, hullStats);
14875
16469
  let baseCapacity = 0;
14876
- if (itemId === ITEM_SHIP_T1_PACKED ||
14877
- itemId === ITEM_PROSPECTOR_T2_PACKED ||
14878
- itemId === ITEM_HAULER_SHIP_T2_PACKED) {
16470
+ if (isShipHull$1(itemId)) {
14879
16471
  baseCapacity = computeBaseCapacityShip(hullStats);
14880
16472
  }
14881
16473
  else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
@@ -14900,31 +16492,45 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
14900
16492
  return out;
14901
16493
  }
14902
16494
 
14903
- function computeBaseHullmass(stats) {
14904
- return 100000 - 75 * stats.density;
16495
+ const DEFAULT_BASE_HULLMASS = 100000;
16496
+ function getBaseHullmassFor(itemId) {
16497
+ return getEntityLayout(itemId)?.baseHullmass ?? DEFAULT_BASE_HULLMASS;
14905
16498
  }
14906
- function computeShipHullCapabilities(stats) {
14907
- const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
14908
- const exponent = statSum / 1998.0;
16499
+ function isShipHull(itemId) {
16500
+ return getPackedEntityType(itemId)?.equals(ENTITY_SHIP) ?? false;
16501
+ }
16502
+ function sumHullStats(stats) {
16503
+ return Object.values(stats).reduce((sum, value) => sum + value, 0);
16504
+ }
16505
+ function computeBaseHullmass(itemId, stats) {
16506
+ if (isShipHull(itemId)) {
16507
+ return Math.floor((getBaseHullmassFor(itemId) * (10000 - sumHullStats(stats))) / 10000);
16508
+ }
16509
+ const lightness = stats.density ?? stats.hardness ?? 0;
16510
+ return Math.floor((getBaseHullmassFor(itemId) * (2000 - lightness)) / 2000);
16511
+ }
16512
+ function computeShipHullCapabilities(stats, itemId = ITEM_SHIP_T1_PACKED) {
16513
+ const statSum = sumHullStats(stats);
16514
+ const exponent = statSum / 4995.0;
14909
16515
  return {
14910
- hullmass: computeBaseHullmass(stats),
16516
+ hullmass: computeBaseHullmass(itemId, stats),
14911
16517
  capacity: Math.floor(5000000 * 6 ** exponent),
14912
16518
  };
14913
16519
  }
14914
16520
  function computeEngineCapabilities(stats) {
14915
- const vol = stats.volatility;
14916
- const thm = stats.thermal;
16521
+ const vol = computeEffectiveModuleStat(stats.volatility);
16522
+ const thm = computeEffectiveModuleStat(stats.thermal);
14917
16523
  return {
14918
16524
  thrust: 400 + Math.floor((vol * 3) / 4),
14919
16525
  drain: 2 * Math.max(30, 50 - Math.floor(thm / 70)),
14920
16526
  };
14921
16527
  }
14922
16528
  function computeGeneratorCapabilities(stats) {
14923
- const res = stats.resonance;
14924
- const ref = stats.reflectivity;
16529
+ const res = computeEffectiveModuleStat(stats.resonance);
16530
+ const ref = computeEffectiveModuleStat(stats.reflectivity);
14925
16531
  return {
14926
- capacity: 1300 + Math.floor(res / 2),
14927
- recharge: 2 * (1 + Math.floor((ref * 3) / 1000)),
16532
+ capacity: 1300000 + res * 500,
16533
+ recharge: 2000 + ref * 6,
14928
16534
  };
14929
16535
  }
14930
16536
  const GATHERER_DEPTH_TABLE = [
@@ -14950,11 +16556,11 @@ function gathererDepthForTier(tol, tier) {
14950
16556
  function computeGathererCapabilities(stats, tier) {
14951
16557
  const str = stats.strength;
14952
16558
  const con = stats.saturation;
14953
- const hrd = stats.hardness;
16559
+ const tol = stats.tolerance ?? stats.hardness;
14954
16560
  return {
14955
16561
  yield: 200 + str,
14956
- drain: 2 * Math.max(250, 1250 - Math.floor((con * 25) / 20)),
14957
- depth: gathererDepthForTier(hrd, tier),
16562
+ drain: 2 * Math.max(250000, 1250000 - con * 1250),
16563
+ depth: gathererDepthForTier(tol, tier),
14958
16564
  };
14959
16565
  }
14960
16566
  function computeLoaderCapabilities(stats) {
@@ -14971,7 +16577,15 @@ function computeCrafterCapabilities(stats) {
14971
16577
  const con = stats.conductivity;
14972
16578
  return {
14973
16579
  speed: 100 + Math.floor((fin * 4) / 5),
14974
- drain: Math.max(5, 30 - Math.floor(con / 33)),
16580
+ drain: Math.max(5000, 30000 - Math.floor((con * 1000) / 33)),
16581
+ };
16582
+ }
16583
+ function computeBuilderCapabilities(stats) {
16584
+ const coh = stats.cohesion;
16585
+ const tol = stats.tolerance;
16586
+ return {
16587
+ speed: 100 + Math.floor((coh * 4) / 5),
16588
+ drain: Math.max(5000, 30000 - Math.floor((tol * 1000) / 33)),
14975
16589
  };
14976
16590
  }
14977
16591
  function computeHaulerCapabilities(stats, tier) {
@@ -14981,7 +16595,7 @@ function computeHaulerCapabilities(stats, tier) {
14981
16595
  return {
14982
16596
  capacity: computeHaulerCapacity(resonance, tier),
14983
16597
  efficiency: 2000 + plasticity * 6,
14984
- drain: Math.max(3, 15 - Math.floor(conductivity / 80)),
16598
+ drain: computeHaulerDrain(conductivity, tier),
14985
16599
  };
14986
16600
  }
14987
16601
  function computeLauncherCapabilities(stats, amp = 100) {
@@ -14991,13 +16605,11 @@ function computeLauncherCapabilities(stats, amp = 100) {
14991
16605
  drain: stats.drain,
14992
16606
  };
14993
16607
  }
14994
- function computeStorageCapabilities(stats) {
14995
- const strength = stats.strength ?? 0;
14996
- const density = stats.density ?? 0;
14997
- const hardness = stats.hardness ?? 0;
14998
- const cohesion = stats.cohesion ?? 0;
14999
- const statSum = strength + density + hardness + cohesion;
15000
- return { capacity: 10000000 + Math.floor((statSum * 50000000) / 3996) };
16608
+ function computeStorageCapabilities(stats, tier) {
16609
+ return {
16610
+ capacity: computeCargoBayCapacity(stats.strength ?? 0, stats.density ?? 0, stats.hardness ?? 0),
16611
+ drain: computeCargoBayDrain(stats.cohesion ?? 0, tier),
16612
+ };
15001
16613
  }
15002
16614
  function computeBatteryCapabilities(stats) {
15003
16615
  const volatility = stats.volatility ?? 0;
@@ -15005,7 +16617,7 @@ function computeBatteryCapabilities(stats) {
15005
16617
  const plasticity = stats.plasticity ?? 0;
15006
16618
  const insulation = stats.insulation ?? 0;
15007
16619
  const statSum = volatility + thermal + plasticity + insulation;
15008
- return { capacity: 2500 + Math.floor((statSum * 7500) / 3996) };
16620
+ return { capacity: 2500000 + Math.floor((statSum * 7500000) / 3996) };
15009
16621
  }
15010
16622
  const CAPACITY_TIER_TABLE = [1.0, 1.4, 1.8, 2.2, 2.6, 3.0, 3.4, 3.8, 4.2, 4.6];
15011
16623
  function capacityTierMultiplier(tier) {
@@ -15017,25 +16629,25 @@ function applyCapacityTier(baseCapacity, tier) {
15017
16629
  }
15018
16630
  function computeBaseCapacity(itemId, stats) {
15019
16631
  let base;
15020
- switch (itemId) {
15021
- case ITEM_SHIP_T1_PACKED:
15022
- case ITEM_PROSPECTOR_T2_PACKED:
15023
- case ITEM_HAULER_SHIP_T2_PACKED:
15024
- base = computeShipHullCapabilities(stats).capacity;
15025
- break;
15026
- case ITEM_EXTRACTOR_T1_PACKED:
15027
- case ITEM_FACTORY_T1_PACKED:
15028
- case ITEM_MASS_DRIVER_T1_PACKED:
15029
- case ITEM_MASS_CATCHER_T1_PACKED:
15030
- case ITEM_CONTAINER_T1_PACKED:
15031
- case ITEM_CONTAINER_T2_PACKED:
15032
- base = computeContainerCapabilities(stats).capacity;
15033
- break;
15034
- case ITEM_WAREHOUSE_T1_PACKED:
15035
- base = computeWarehouseHullCapabilities(stats).capacity;
15036
- break;
15037
- default:
15038
- return 0;
16632
+ if (isShipHull(itemId)) {
16633
+ base = computeShipHullCapabilities(stats, itemId).capacity;
16634
+ }
16635
+ else {
16636
+ switch (itemId) {
16637
+ case ITEM_EXTRACTOR_T1_PACKED:
16638
+ case ITEM_FACTORY_T1_PACKED:
16639
+ case ITEM_MASS_DRIVER_T1_PACKED:
16640
+ case ITEM_MASS_CATCHER_T1_PACKED:
16641
+ case ITEM_CONTAINER_T1_PACKED:
16642
+ case ITEM_CONTAINER_T2_PACKED:
16643
+ base = computeContainerCapabilities(stats).capacity;
16644
+ break;
16645
+ case ITEM_WAREHOUSE_T1_PACKED:
16646
+ base = computeWarehouseHullCapabilities(stats).capacity;
16647
+ break;
16648
+ default:
16649
+ return 0;
16650
+ }
15039
16651
  }
15040
16652
  return applyCapacityTier(base, getItem(itemId).tier);
15041
16653
  }
@@ -15047,7 +16659,7 @@ function computeWarehouseHullCapabilities(stats) {
15047
16659
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15048
16660
  const exponent = statSum / 1998.0;
15049
16661
  return {
15050
- hullmass: computeBaseHullmass(stats),
16662
+ hullmass: computeBaseHullmass(ITEM_WAREHOUSE_T1_PACKED, stats),
15051
16663
  capacity: Math.floor(100000000 * 6 ** exponent),
15052
16664
  };
15053
16665
  }
@@ -15068,11 +16680,15 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15068
16680
  let maxGathDepth = 0;
15069
16681
  let hasGatherer = false;
15070
16682
  let totalStorageCapacity = 0;
16683
+ let totalCargoHoldDrain = 0;
15071
16684
  const baseCapacity = computeBaseCapacity(itemId, stats);
15072
16685
  let installedModuleMass = 0;
15073
16686
  let totalCrafterSpeed = 0;
15074
16687
  let totalCrafterDrain = 0;
15075
16688
  let hasCrafter = false;
16689
+ let totalBuilderSpeed = 0;
16690
+ let totalBuilderDrain = 0;
16691
+ let hasBuilder = false;
15076
16692
  let totalHaulerCapacity = 0;
15077
16693
  let weightedHaulerEffNum = 0n;
15078
16694
  let totalHaulerDrain = 0;
@@ -15087,6 +16703,7 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15087
16703
  let totalBatteryCapacity = 0;
15088
16704
  const gathererLanes = [];
15089
16705
  const crafterLanes = [];
16706
+ const builderLanes = [];
15090
16707
  const loaderLanes = [];
15091
16708
  for (const mod of modules) {
15092
16709
  const item = getItem(mod.itemId);
@@ -15098,19 +16715,23 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15098
16715
  hasEngine = true;
15099
16716
  const caps = computeEngineCapabilities(decodedStats);
15100
16717
  totalThrust += applySlotMultiplier(caps.thrust, amp);
15101
- totalEngineThm += decodedStats.thermal ?? 0;
16718
+ totalEngineThm += computeEffectiveModuleStat(decodedStats.thermal ?? 0);
15102
16719
  engineCount += 1;
15103
16720
  }
15104
16721
  else if (modType === MODULE_GENERATOR) {
15105
16722
  hasGenerator = true;
15106
16723
  const caps = computeGeneratorCapabilities(decodedStats);
15107
- totalGenCapacity += applySlotMultiplier(caps.capacity, amp);
15108
- totalGenRecharge += applySlotMultiplier(caps.recharge, amp);
16724
+ totalGenCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16725
+ totalGenRecharge += applySlotMultiplierUint32(caps.recharge, amp);
15109
16726
  }
15110
16727
  else if (modType === MODULE_GATHERER) {
15111
16728
  hasGatherer = true;
15112
16729
  const tier = item.tier;
15113
- const caps = computeGathererCapabilities(decodedStats, tier);
16730
+ const caps = computeGathererCapabilities({
16731
+ strength: decodeStat(mod.stats, 0),
16732
+ tolerance: decodeStat(mod.stats, 1),
16733
+ saturation: decodeStat(mod.stats, 2),
16734
+ }, tier);
15114
16735
  const scaledYield = applySlotMultiplier(caps.yield, amp);
15115
16736
  totalGathYield += scaledYield;
15116
16737
  totalGathDrain += caps.drain;
@@ -15138,8 +16759,9 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15138
16759
  });
15139
16760
  }
15140
16761
  else if (modType === MODULE_STORAGE) {
15141
- const caps = computeStorageCapabilities(decodedStats);
16762
+ const caps = computeStorageCapabilities(decodedStats, item.tier);
15142
16763
  totalStorageCapacity += applySlotMultiplierUint32(caps.capacity, amp);
16764
+ totalCargoHoldDrain += caps.drain;
15143
16765
  }
15144
16766
  else if (modType === MODULE_CRAFTER) {
15145
16767
  hasCrafter = true;
@@ -15154,6 +16776,19 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15154
16776
  outputPct: amp,
15155
16777
  });
15156
16778
  }
16779
+ else if (modType === MODULE_BUILDER) {
16780
+ hasBuilder = true;
16781
+ const caps = computeBuilderCapabilities(decodedStats);
16782
+ const scaledSpeed = applySlotMultiplier(caps.speed, amp);
16783
+ totalBuilderSpeed += scaledSpeed;
16784
+ totalBuilderDrain += caps.drain;
16785
+ builderLanes.push({
16786
+ slotIndex: mod.slotIndex,
16787
+ speed: scaledSpeed,
16788
+ drain: caps.drain,
16789
+ outputPct: amp,
16790
+ });
16791
+ }
15157
16792
  else if (modType === MODULE_HAULER) {
15158
16793
  hasHauler = true;
15159
16794
  const caps = computeHaulerCapabilities(decodedStats, item.tier);
@@ -15188,12 +16823,20 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15188
16823
  totalGenCapacity += totalBatteryCapacity;
15189
16824
  }
15190
16825
  const result = {
15191
- hullmass: computeBaseHullmass(stats) + installedModuleMass,
16826
+ hullmass: computeBaseHullmass(itemId, stats) + installedModuleMass,
15192
16827
  capacity: clampUint32(baseCapacity + totalStorageCapacity),
15193
16828
  };
15194
16829
  if (hasEngine) {
15195
16830
  const avgThm = engineCount > 0 ? Math.trunc(totalEngineThm / engineCount) : 0;
15196
- result.engines = { thrust: totalThrust, drain: computeTravelDrain(totalThrust, avgThm) };
16831
+ const engineDrain = computeTravelDrain(totalThrust, avgThm);
16832
+ const totalDrain = clampUint32(engineDrain + totalCargoHoldDrain + totalHaulerDrain);
16833
+ result.engines = { thrust: totalThrust, drain: totalDrain };
16834
+ result.travelDrain = {
16835
+ engine: engineDrain,
16836
+ cargoHolds: totalCargoHoldDrain,
16837
+ tractorBeams: totalHaulerDrain,
16838
+ total: totalDrain,
16839
+ };
15197
16840
  }
15198
16841
  if (hasGenerator) {
15199
16842
  result.generator = {
@@ -15221,6 +16864,10 @@ function computeEntityCapabilities(stats, itemId, modules, layout) {
15221
16864
  result.crafter = { speed: clampUint16(totalCrafterSpeed), drain: totalCrafterDrain };
15222
16865
  result.crafterLanes = crafterLanes;
15223
16866
  }
16867
+ if (hasBuilder) {
16868
+ result.builder = { speed: clampUint16(totalBuilderSpeed), drain: totalBuilderDrain };
16869
+ result.builderLanes = builderLanes;
16870
+ }
15224
16871
  if (hasHauler) {
15225
16872
  const efficiency = totalHaulerCapacity > 0 ? Number(weightedHaulerEffNum / BigInt(totalHaulerCapacity)) : 0;
15226
16873
  result.hauler = {
@@ -15248,7 +16895,7 @@ function computeContainerCapabilities(stats) {
15248
16895
  const statSum = (stats.strength ?? 0) + (stats.hardness ?? 0);
15249
16896
  const exponent = statSum / 1998.0;
15250
16897
  return {
15251
- hullmass: computeBaseHullmass(stats),
16898
+ hullmass: computeBaseHullmass(ITEM_CONTAINER_T1_PACKED, stats),
15252
16899
  capacity: Math.floor(22000000 * 6 ** exponent),
15253
16900
  };
15254
16901
  }
@@ -15314,7 +16961,7 @@ function makeEntity(packedItemId, state) {
15314
16961
  holds: [],
15315
16962
  };
15316
16963
  if (state.energy !== undefined)
15317
- info.energy = UInt16.from(state.energy);
16964
+ info.energy = UInt32.from(state.energy);
15318
16965
  if (kind === 'container') {
15319
16966
  info.modules = [];
15320
16967
  if (state.hullmass !== undefined)
@@ -15374,6 +17021,12 @@ function makeEntity(packedItemId, state) {
15374
17021
  drain: l.drain,
15375
17022
  output_pct: l.outputPct,
15376
17023
  }));
17024
+ info.builder_lanes = (caps.builderLanes ?? []).map((l) => Types.builder_lane.from({
17025
+ slot_index: l.slotIndex,
17026
+ speed: l.speed,
17027
+ drain: l.drain,
17028
+ output_pct: l.outputPct,
17029
+ }));
15377
17030
  info.loader_lanes = (caps.loaderLanes ?? []).map((l) => Types.loader_lane.from({
15378
17031
  slot_index: l.slotIndex,
15379
17032
  mass: l.mass,
@@ -15385,6 +17038,8 @@ function makeEntity(packedItemId, state) {
15385
17038
  info.gatherer_lanes = [];
15386
17039
  if (!info.crafter_lanes)
15387
17040
  info.crafter_lanes = [];
17041
+ if (!info.builder_lanes)
17042
+ info.builder_lanes = [];
15388
17043
  if (!info.loader_lanes)
15389
17044
  info.loader_lanes = [];
15390
17045
  const entityInfo = Types.entity_info.from(info);
@@ -15400,7 +17055,13 @@ function calc_craft_duration(speed, totalInputMass) {
15400
17055
  }
15401
17056
  function calc_craft_energy(drain, totalInputMass) {
15402
17057
  const raw = Math.floor((totalInputMass * drain) / CRAFT_ENERGY_DIVISOR);
15403
- return UInt32.from(Math.min(Math.max(raw + 1, 1), 4294967295));
17058
+ return UInt32.from(Math.min(Math.max(raw + 1, 1000), 4294967295));
17059
+ }
17060
+ function calc_build_duration(speed, totalInputMass) {
17061
+ return calc_craft_duration(speed, totalInputMass);
17062
+ }
17063
+ function calc_build_energy(drain, totalInputMass) {
17064
+ return calc_craft_energy(drain, totalInputMass);
15404
17065
  }
15405
17066
 
15406
17067
  class PlotManager extends BaseManager {
@@ -15463,7 +17124,7 @@ class PlotManager extends BaseManager {
15463
17124
  recipe,
15464
17125
  progress,
15465
17126
  finalizeAction: Name.from('buildplot'),
15466
- finalizerCapability: 'crafter',
17127
+ finalizerCapability: 'builder',
15467
17128
  activeTask,
15468
17129
  scheduledBuild,
15469
17130
  };
@@ -15511,16 +17172,16 @@ class ConstructionManager extends BaseManager {
15511
17172
  continue;
15512
17173
  if (!coordsEqual(entity.coordinates, target.coordinates))
15513
17174
  continue;
15514
- const crafterLanes = entity.crafter_lanes ?? [];
15515
- if (crafterLanes.length === 0)
17175
+ const builderLanes = entity.builder_lanes ?? [];
17176
+ if (builderLanes.length === 0)
15516
17177
  continue;
15517
- const speed = crafterLanes.reduce((s, l) => s + Number(l.speed), 0);
17178
+ const speed = builderLanes.reduce((s, l) => s + Number(l.speed), 0);
15518
17179
  out.push({
15519
17180
  entityId: entity.id,
15520
17181
  entityType: entity.type,
15521
17182
  name: entity.entity_name,
15522
- capability: 'crafter',
15523
- crafterSpeed: speed,
17183
+ capability: 'builder',
17184
+ builderSpeed: speed,
15524
17185
  estimatedDuration: this.estimateFinalizeDuration(target, speed),
15525
17186
  });
15526
17187
  }
@@ -15542,12 +17203,12 @@ class ConstructionManager extends BaseManager {
15542
17203
  cumulativeSec += task.duration.toNumber();
15543
17204
  if (!isPushTask(task))
15544
17205
  continue;
15545
- if (!task.entitytarget)
17206
+ if (task.couplings.length === 0)
15546
17207
  continue;
15547
17208
  const projectedEndMs = startedMs + cumulativeSec * 1000;
15548
17209
  if (projectedEndMs < nowMs)
15549
17210
  continue;
15550
- const targetIdStr = task.entitytarget.entity_id.toString();
17211
+ const targetIdStr = task.couplings[0].counterpart.entity_id.toString();
15551
17212
  const etaSeconds = Math.max(0, Math.round((projectedEndMs - nowMs) / 1000));
15552
17213
  let perTarget = buckets.get(targetIdStr);
15553
17214
  if (!perTarget) {
@@ -15672,8 +17333,8 @@ class ConstructionManager extends BaseManager {
15672
17333
  return [];
15673
17334
  return reservationsOf(source);
15674
17335
  }
15675
- estimateFinalizeDuration(target, crafterSpeed) {
15676
- return calc_craft_duration(crafterSpeed, target.progress.massRequired);
17336
+ estimateFinalizeDuration(target, builderSpeed) {
17337
+ return calc_build_duration(builderSpeed, target.progress.massRequired);
15677
17338
  }
15678
17339
  static isConstructionKind(kind) {
15679
17340
  return CONSTRUCTION_KINDS.has(kind);
@@ -15766,18 +17427,18 @@ function isPushTask(task) {
15766
17427
  }
15767
17428
  function isBuildOfPlot(task, plotId) {
15768
17429
  return (task.type.toNumber() === TaskType.BUILDPLOT &&
15769
- task.entitytarget !== undefined &&
15770
- task.entitytarget.entity_id.equals(plotId));
17430
+ task.couplings.length > 0 &&
17431
+ task.couplings[0].counterpart.entity_id.equals(plotId));
15771
17432
  }
15772
17433
  function reservationsOf(source) {
15773
17434
  const out = new Map();
15774
17435
  for (const task of getTasks(source)) {
15775
17436
  if (!isPushTask(task))
15776
17437
  continue;
15777
- if (!task.entitytarget)
17438
+ if (task.couplings.length === 0)
15778
17439
  continue;
15779
- const targetType = task.entitytarget.entity_type;
15780
- const targetId = task.entitytarget.entity_id;
17440
+ const targetType = task.couplings[0].counterpart.entity_type;
17441
+ const targetId = task.couplings[0].counterpart.entity_id;
15781
17442
  for (const c of task.cargo) {
15782
17443
  const itemId = c.item_id.toNumber();
15783
17444
  const quantity = c.quantity.toNumber();
@@ -15866,11 +17527,23 @@ function planRoute(params) {
15866
17527
  return { ok: false, reason: 'empty-destination' };
15867
17528
  }
15868
17529
  const straightLine = dist(origin, dest);
15869
- const heuristic = (c) => Math.ceil(dist(c, dest) / perLegReach);
17530
+ if (straightLine <= perLegReach) {
17531
+ const directCost = params.legCost?.({
17532
+ from: origin,
17533
+ to: dest,
17534
+ distance: straightLine,
17535
+ isDestination: true,
17536
+ });
17537
+ if (directCost !== null) {
17538
+ return { ok: true, waypoints: [dest], legs: 1, totalDistance: straightLine };
17539
+ }
17540
+ }
17541
+ const heuristic = (c) => params.heuristicCost?.(c, dest) ??
17542
+ (params.legCost ? 0 : Math.ceil(dist(c, dest) / perLegReach));
15870
17543
  const gScore = new Map([[key(origin), 0]]);
15871
17544
  const cameFrom = new Map();
15872
17545
  const frontier = [
15873
- { coord: origin, g: 0, f: heuristic(origin), remaining: straightLine },
17546
+ { coord: origin, legs: 0, cost: 0, f: heuristic(origin), remaining: straightLine },
15874
17547
  ];
15875
17548
  let furthest = origin;
15876
17549
  let furthestRemaining = dist(origin, dest);
@@ -15886,6 +17559,8 @@ function planRoute(params) {
15886
17559
  }
15887
17560
  }
15888
17561
  const current = frontier.splice(bestIdx, 1)[0];
17562
+ if (current.cost !== gScore.get(key(current.coord)))
17563
+ continue;
15889
17564
  if (sameCoord(current.coord, dest)) {
15890
17565
  return reconstruct(cameFrom, origin, dest);
15891
17566
  }
@@ -15899,20 +17574,33 @@ function planRoute(params) {
15899
17574
  const inCorridor = dist(origin, n.coord) + dist(n.coord, dest) <= straightLine + corridorSlack;
15900
17575
  if (!inCorridor)
15901
17576
  continue;
15902
- const tentativeG = current.g + 1;
15903
- if (tentativeG > maxLegs) {
17577
+ const tentativeLegs = current.legs + 1;
17578
+ if (tentativeLegs > maxLegs) {
15904
17579
  cappedByMaxLegs = true;
15905
17580
  continue;
15906
17581
  }
17582
+ const evaluatedCost = params.legCost?.({
17583
+ from: current.coord,
17584
+ to: n.coord,
17585
+ distance: n.dist,
17586
+ isDestination: sameCoord(n.coord, dest),
17587
+ });
17588
+ if (evaluatedCost === null)
17589
+ continue;
17590
+ const legCost = evaluatedCost ?? 1;
17591
+ if (!(legCost >= 0) || !Number.isFinite(legCost))
17592
+ continue;
15907
17593
  const nk = key(n.coord);
15908
- if (tentativeG < (gScore.get(nk) ?? Infinity)) {
15909
- gScore.set(nk, tentativeG);
17594
+ const nextCost = current.cost + legCost;
17595
+ if (nextCost < (gScore.get(nk) ?? Infinity)) {
17596
+ gScore.set(nk, nextCost);
15910
17597
  cameFrom.set(nk, current.coord);
15911
17598
  const remaining = dist(n.coord, dest);
15912
17599
  frontier.push({
15913
17600
  coord: n.coord,
15914
- g: tentativeG,
15915
- f: tentativeG + Math.ceil(remaining / perLegReach),
17601
+ legs: tentativeLegs,
17602
+ cost: nextCost,
17603
+ f: nextCost + heuristic(n.coord),
15916
17604
  remaining,
15917
17605
  });
15918
17606
  }
@@ -15962,47 +17650,22 @@ function reconstruct(cameFrom, origin, dest) {
15962
17650
  const waypoints = path.slice(1);
15963
17651
  return { ok: true, waypoints, legs: waypoints.length, totalDistance };
15964
17652
  }
15965
- let scanProvider = null;
15966
- const graphCache = new Map();
15967
- function setScanProvider(provider) {
15968
- scanProvider = provider;
15969
- graphCache.clear();
15970
- }
15971
- function sdkSystemGraph(seed) {
17653
+ const graphCache = new WeakMap();
17654
+ function sdkSystemGraph(seed, scan) {
15972
17655
  const s = Checksum256.from(seed);
15973
17656
  const seedHex = s.toString();
15974
- const cached = graphCache.get(seedHex);
17657
+ let bySeed = graphCache.get(scan);
17658
+ if (!bySeed) {
17659
+ bySeed = new Map();
17660
+ graphCache.set(scan, bySeed);
17661
+ }
17662
+ const cached = bySeed.get(seedHex);
15975
17663
  if (cached)
15976
17664
  return cached;
15977
- const graph = scanProvider ? wasmSystemGraph(s, seedHex, scanProvider) : jsSystemGraph(s);
15978
- graphCache.set(seedHex, graph);
17665
+ const graph = wasmSystemGraph(s, seedHex, scan);
17666
+ bySeed.set(seedHex, graph);
15979
17667
  return graph;
15980
17668
  }
15981
- function jsSystemGraph(s) {
15982
- return {
15983
- hasSystem: (c) => hasSystem(s, { x: c.x, y: c.y }) || wormholeAt(s, c.x, c.y) !== null,
15984
- nearby: (c, reachTiles) => {
15985
- const seen = new Set([`${c.x},${c.y}`]);
15986
- const out = [];
15987
- for (const d of findNearbyPlanets(s, { x: c.x, y: c.y }, reachTiles * PRECISION$1)) {
15988
- const coord = { x: Number(d.destination.x), y: Number(d.destination.y) };
15989
- const k = `${coord.x},${coord.y}`;
15990
- if (seen.has(k))
15991
- continue;
15992
- seen.add(k);
15993
- out.push({ coord, dist: Number(d.distance) / PRECISION$1 });
15994
- }
15995
- for (const coord of nearbyWormholes(s, c.x, c.y, reachTiles)) {
15996
- const k = `${coord.x},${coord.y}`;
15997
- if (seen.has(k))
15998
- continue;
15999
- seen.add(k);
16000
- out.push({ coord, dist: Math.hypot(coord.x - c.x, coord.y - c.y) });
16001
- }
16002
- return out;
16003
- },
16004
- };
16005
- }
16006
17669
  const SCAN_BUCKET = 48;
16007
17670
  function wasmSystemGraph(s, seedHex, scan) {
16008
17671
  const bucketCache = new Map();
@@ -16055,21 +17718,20 @@ function wasmSystemGraph(s, seedHex, scan) {
16055
17718
  };
16056
17719
  }
16057
17720
 
16058
- function computePerLegReach(s, haulCount = 0) {
17721
+ function computePerLegReach(s) {
16059
17722
  const capacity = s.generator?.capacity;
16060
17723
  const drain = s.engines?.drain;
16061
17724
  if (capacity === undefined || drain === undefined || drain === 0n) {
16062
17725
  throw new Error('entity has no usable engine/generator (cannot compute per-leg reach)');
16063
17726
  }
16064
- const haulDrain = s.hauler && haulCount > 0 ? s.hauler.drain * BigInt(haulCount) : 0n;
16065
- return Number(capacity) / Number(drain + haulDrain);
17727
+ return Number(capacity) / Number(drain);
16066
17728
  }
16067
- function computeGroupPerLegReach(participants, haulCount) {
17729
+ function computeGroupPerLegReach(participants) {
16068
17730
  const movers = participants.filter((p) => p.engines !== undefined && p.engines.drain !== 0n);
16069
17731
  if (movers.length === 0) {
16070
17732
  throw new Error('group has no moving entity (cannot compute per-leg reach)');
16071
17733
  }
16072
- return Math.min(...movers.map((p) => computePerLegReach(p, haulCount)));
17734
+ return Math.min(...movers.map(computePerLegReach));
16073
17735
  }
16074
17736
 
16075
17737
  function simulateRoute(movers, waypoints, origin, recharge) {
@@ -16098,17 +17760,13 @@ function simulateRoute(movers, waypoints, origin, recharge) {
16098
17760
  for (const to of waypoints) {
16099
17761
  const distance = distanceBetweenPoints(from.x, from.y, to.x, to.y);
16100
17762
  const distanceNum = Number(distance);
16101
- const distanceCells = Math.trunc(distanceNum / PRECISION$1);
17763
+ const distanceCells = distanceNum / PRECISION;
16102
17764
  const energyCostByMover = {};
16103
17765
  for (const m of movers) {
16104
17766
  if (!m.hasMovement || !m.engines)
16105
17767
  continue;
16106
17768
  const key = String(m.ref.entityId);
16107
- let cost = Number(calc_energyusage(distance, m.engines.drain));
16108
- if (m.hauler) {
16109
- cost += Math.trunc(distanceCells) * m.hauler.drain * haulCount;
16110
- }
16111
- energyCostByMover[key] = cost;
17769
+ energyCostByMover[key] = Number(calc_energyusage(distance, m.engines.drain));
16112
17770
  }
16113
17771
  let rechargeBefore = false;
16114
17772
  let rechargeSeconds = 0;
@@ -16229,6 +17887,23 @@ function resolveLaneCrafter(modules, entityItemId, laneKey) {
16229
17887
  const drain = computeCrafterDrain(fin);
16230
17888
  return { slotIndex: idx, speed, drain, outputPct: amp };
16231
17889
  }
17890
+ function resolveLaneBuilder(modules, entityItemId, laneKey) {
17891
+ const idx = laneKey - 1;
17892
+ const installed = idx >= 0 && idx < modules.length ? modules[idx].installed : undefined;
17893
+ if (!installed)
17894
+ throw new Error('builder lane has no module');
17895
+ const item = getItem(Number(installed.item_id.value ?? installed.item_id));
17896
+ if (item.moduleType !== 'builder')
17897
+ throw new Error('lane module is not a builder');
17898
+ const stats = BigInt(installed.stats.toString());
17899
+ const coh = decodeStat(stats, 0);
17900
+ const tol = decodeStat(stats, 1);
17901
+ const layout = getEntityLayout(entityItemId)?.slots ?? [];
17902
+ const amp = getSlotAmp(layout, idx);
17903
+ const speed = applySlotMultiplier(computeBuilderSpeed(coh), amp);
17904
+ const drain = computeBuilderDrain(tol);
17905
+ return { slotIndex: idx, speed, drain, outputPct: amp };
17906
+ }
16232
17907
  function resolveLaneLoader(modules, entityItemId, laneKey) {
16233
17908
  if (laneKey === LANE_MOBILITY) {
16234
17909
  return { slotIndex: -1, thrust: 0, mass: 0, outputPct: 0, valid: false };
@@ -16536,6 +18211,10 @@ function recomputeCaps(entity) {
16536
18211
  hullStats.strength = decodeStat(entity.stats, 0);
16537
18212
  if (hullStats.hardness === undefined)
16538
18213
  hullStats.hardness = decodeStat(entity.stats, 2);
18214
+ if (itemId === ITEM_SHIP_T1_PACKED) {
18215
+ hullStats.__legacyShipChannel3 = decodeStat(entity.stats, 3);
18216
+ hullStats.__legacyShipChannel4 = decodeStat(entity.stats, 4);
18217
+ }
16539
18218
  const layout = getEntityLayout(itemId)?.slots ?? [];
16540
18219
  const installed = toInstalledModules(entity.modules);
16541
18220
  const caps = computeEntityCapabilities(hullStats, itemId, installed, layout);
@@ -16558,6 +18237,12 @@ function recomputeCaps(entity) {
16558
18237
  drain: l.drain,
16559
18238
  output_pct: l.outputPct,
16560
18239
  });
18240
+ const toBuilderLane = (l) => Types.builder_lane.from({
18241
+ slot_index: l.slotIndex,
18242
+ speed: l.speed,
18243
+ drain: l.drain,
18244
+ output_pct: l.outputPct,
18245
+ });
16561
18246
  return {
16562
18247
  hullmass: UInt32.from(caps.hullmass),
16563
18248
  capacity: UInt32.from(caps.capacity),
@@ -16568,6 +18253,7 @@ function recomputeCaps(entity) {
16568
18253
  loaderLanes: (caps.loaderLanes ?? []).map(toLoaderLane),
16569
18254
  gathererLanes: (caps.gathererLanes ?? []).map(toGathererLane),
16570
18255
  crafterLanes: (caps.crafterLanes ?? []).map(toCrafterLane),
18256
+ builderLanes: (caps.builderLanes ?? []).map(toBuilderLane),
16571
18257
  hauler: caps.hauler
16572
18258
  ? Types.hauler_stats.from({
16573
18259
  capacity: caps.hauler.capacity,
@@ -16604,6 +18290,7 @@ function createProjectedEntity(entity) {
16604
18290
  const loaderLanes = entity.loader_lanes ?? caps?.loaderLanes ?? [];
16605
18291
  const gathererLanes = entity.gatherer_lanes ?? caps?.gathererLanes ?? [];
16606
18292
  const crafterLanes = entity.crafter_lanes ?? caps?.crafterLanes ?? [];
18293
+ const builderLanes = entity.builder_lanes ?? caps?.builderLanes ?? [];
16607
18294
  const engines = entity.engines ?? caps?.engines;
16608
18295
  const generator = entity.generator ?? caps?.generator;
16609
18296
  const hauler = entity.hauler ?? caps?.hauler;
@@ -16612,7 +18299,7 @@ function createProjectedEntity(entity) {
16612
18299
  const cargo = entity.cargo.map(cargoItemToStack);
16613
18300
  const projected = {
16614
18301
  location: Coordinates.from(entity.coordinates),
16615
- energy: UInt16.from(entity.energy ?? 0),
18302
+ energy: UInt32.from(entity.energy ?? 0),
16616
18303
  cargo,
16617
18304
  shipMass,
16618
18305
  capacity: capacity ? UInt64.from(capacity) : undefined,
@@ -16623,6 +18310,7 @@ function createProjectedEntity(entity) {
16623
18310
  loaderLanes,
16624
18311
  gathererLanes,
16625
18312
  crafterLanes,
18313
+ builderLanes,
16626
18314
  get cargoMass() {
16627
18315
  return calcStacksMass(this.cargo);
16628
18316
  },
@@ -16668,13 +18356,13 @@ function applyRechargeTask(projected, _task, options) {
16668
18356
  if (!projected.generator)
16669
18357
  return;
16670
18358
  if (options.complete) {
16671
- projected.energy = UInt16.from(projected.generator.capacity);
18359
+ projected.energy = UInt32.from(projected.generator.capacity);
16672
18360
  }
16673
18361
  else if (options.progress !== undefined) {
16674
18362
  const capacity = Number(projected.generator.capacity);
16675
18363
  const currentEnergy = Number(projected.energy);
16676
18364
  const rechargeAmount = (capacity - currentEnergy) * options.progress;
16677
- projected.energy = UInt16.from(Math.min(capacity, currentEnergy + rechargeAmount));
18365
+ projected.energy = UInt32.from(Math.min(capacity, currentEnergy + rechargeAmount));
16678
18366
  }
16679
18367
  }
16680
18368
  function applyFlightTask(projected, task, options) {
@@ -16693,8 +18381,8 @@ function applyFlightTask(projected, task, options) {
16693
18381
  });
16694
18382
  const partialEnergy = UInt64.from(Math.floor(Number(task.energy_cost ?? 0) * options.progress));
16695
18383
  projected.energy = projected.energy.gt(partialEnergy)
16696
- ? UInt16.from(projected.energy.subtracting(partialEnergy))
16697
- : UInt16.from(0);
18384
+ ? UInt32.from(projected.energy.subtracting(partialEnergy))
18385
+ : UInt32.from(0);
16698
18386
  }
16699
18387
  }
16700
18388
  function addCargoItem(projected, item) {
@@ -16716,16 +18404,16 @@ function applyRemoveCargoTask(projected, task) {
16716
18404
  function applyEnergyCost(projected, task) {
16717
18405
  if (!task.energy_cost)
16718
18406
  return;
16719
- const energyCost = UInt16.from(task.energy_cost);
18407
+ const energyCost = UInt32.from(task.energy_cost);
16720
18408
  projected.energy = projected.energy.gt(energyCost)
16721
- ? UInt16.from(projected.energy.subtracting(energyCost))
16722
- : UInt16.from(0);
18409
+ ? UInt32.from(projected.energy.subtracting(energyCost))
18410
+ : UInt32.from(0);
16723
18411
  }
16724
18412
  function applyGatherTask(projected, task, options) {
16725
18413
  if (!options.complete)
16726
18414
  return;
16727
18415
  applyEnergyCost(projected, task);
16728
- if (!task.entitytarget) {
18416
+ if (task.couplings.length === 0) {
16729
18417
  applyAddCargoTask(projected, task);
16730
18418
  }
16731
18419
  }
@@ -16736,12 +18424,8 @@ function applyCraftTask(projected, task) {
16736
18424
  for (let i = 0; i < task.cargo.length - 1; i++) {
16737
18425
  removeCargoItem(projected, task.cargo[i]);
16738
18426
  }
16739
- addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16740
- }
16741
- function applyDeployTask(projected, task) {
16742
- applyEnergyCost(projected, task);
16743
- if (task.cargo.length > 0) {
16744
- removeCargoItem(projected, task.cargo[0]);
18427
+ if (task.couplings.length === 0) {
18428
+ addCargoItem(projected, task.cargo[task.cargo.length - 1]);
16745
18429
  }
16746
18430
  }
16747
18431
  function applyTask(projected, task) {
@@ -16767,9 +18451,6 @@ function applyTask(projected, task) {
16767
18451
  case TaskType.CRAFT:
16768
18452
  applyCraftTask(projected, task);
16769
18453
  break;
16770
- case TaskType.DEPLOY:
16771
- applyDeployTask(projected, task);
16772
- break;
16773
18454
  case TaskType.UNDEPLOY:
16774
18455
  case TaskType.DEMOLISH:
16775
18456
  break;
@@ -16907,10 +18588,6 @@ function projectEntityAt(entity, now) {
16907
18588
  if (taskComplete)
16908
18589
  applyCraftTask(projected, task);
16909
18590
  break;
16910
- case TaskType.DEPLOY:
16911
- if (taskComplete)
16912
- applyDeployTask(projected, task);
16913
- break;
16914
18591
  case TaskType.UNDEPLOY:
16915
18592
  case TaskType.DEMOLISH:
16916
18593
  break;
@@ -16937,7 +18614,7 @@ function taskCargoChanges(task) {
16937
18614
  case TaskType.UNWRAP:
16938
18615
  return items.map((i) => toChange(i, 'in'));
16939
18616
  case TaskType.GATHER:
16940
- return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
18617
+ return task.couplings.length > 0 ? [] : items.map((i) => toChange(i, 'in'));
16941
18618
  case TaskType.UNLOAD:
16942
18619
  return items.map((i) => toChange(i, 'out'));
16943
18620
  case TaskType.CRAFT:
@@ -16950,6 +18627,49 @@ function taskCargoChanges(task) {
16950
18627
  }
16951
18628
  }
16952
18629
 
18630
+ const JOB_QUEUE_CAP = 25;
18631
+ function activeOn(jobs, socket, now) {
18632
+ return jobs
18633
+ .filter((j) => j.socket === socket && j.completesAt > now)
18634
+ .sort((a, b) => a.startsAt.getTime() - b.startsAt.getTime());
18635
+ }
18636
+ function jobsToLanes(jobs, socketCount, now) {
18637
+ const lanes = [];
18638
+ for (let socket = 0; socket < socketCount; socket++) {
18639
+ const entries = [];
18640
+ let cursor = null;
18641
+ for (const j of activeOn(jobs, socket, now)) {
18642
+ if (cursor && j.startsAt > cursor) {
18643
+ entries.push({ kind: 'idle', startsAt: cursor, completesAt: j.startsAt });
18644
+ }
18645
+ entries.push({ kind: 'job', startsAt: j.startsAt, completesAt: j.completesAt, job: j });
18646
+ cursor = j.completesAt;
18647
+ }
18648
+ lanes.push({ socket, entries });
18649
+ }
18650
+ return lanes;
18651
+ }
18652
+ function socketTail(jobs, socket, now) {
18653
+ const active = activeOn(jobs, socket, now);
18654
+ const last = active[active.length - 1];
18655
+ return last && last.completesAt > now ? last.completesAt : now;
18656
+ }
18657
+ function pickFabricator(jobs, sockets, durationBySocketMinutes, now) {
18658
+ let best = null;
18659
+ for (let slot = 0; slot < sockets.length; slot++) {
18660
+ if (!sockets[slot].open)
18661
+ continue;
18662
+ if (activeOn(jobs, slot, now).length >= JOB_QUEUE_CAP)
18663
+ continue;
18664
+ const startsAt = socketTail(jobs, slot, now);
18665
+ const completesAt = new Date(startsAt.getTime() + durationBySocketMinutes[slot] * 60000);
18666
+ if (!best || completesAt < best.completesAt) {
18667
+ best = { slot, startsAt, completesAt };
18668
+ }
18669
+ }
18670
+ return best;
18671
+ }
18672
+
16953
18673
  function composeIdleResolve(blocker, action, actions, now, lookupCounterpart) {
16954
18674
  const ids = [];
16955
18675
  const seen = new Set();
@@ -16984,15 +18704,16 @@ function taskCargoEffect(task) {
16984
18704
  case TaskType.UNLOAD:
16985
18705
  return { added: [], removed: task.cargo };
16986
18706
  case TaskType.GATHER:
16987
- return task.entitytarget ? { added: [], removed: [] } : { added: task.cargo, removed: [] };
18707
+ return task.couplings.length > 0
18708
+ ? { added: [], removed: [] }
18709
+ : { added: task.cargo, removed: [] };
16988
18710
  case TaskType.CRAFT:
16989
18711
  if (task.cargo.length === 0)
16990
18712
  return { added: [], removed: [] };
16991
- return { added: [task.cargo[task.cargo.length - 1]], removed: task.cargo.slice(0, -1) };
16992
- case TaskType.DEPLOY:
16993
- return task.cargo.length > 0
16994
- ? { added: [], removed: [task.cargo[0]] }
16995
- : { added: [], removed: [] };
18713
+ return {
18714
+ added: task.couplings.length === 0 ? [task.cargo[task.cargo.length - 1]] : [],
18715
+ removed: task.cargo.slice(0, -1),
18716
+ };
16996
18717
  default:
16997
18718
  return { added: [], removed: [] };
16998
18719
  }
@@ -17170,31 +18891,24 @@ function cancelEligibility(entity, laneKey, fromTaskIndex, input) {
17170
18891
  effects.abandonsRunning = true;
17171
18892
  if (t.energy_cost)
17172
18893
  energyForfeited += t.energy_cost.toNumber();
17173
- if (t.type.equals(TaskType.BUILDPLOT) && t.entitytarget)
17174
- effects.keepsPlotDeposits = { plot: t.entitytarget };
17175
- if (t.hold && t.entitytarget) {
17176
- const counterpart = input.counterparts?.get(t.entitytarget.entity_id.toString());
17177
- const hold = (counterpart?.holds ?? []).find((h) => h.id.equals(t.hold)) ??
17178
- (entity.holds ?? []).find((h) => h.id.equals(t.hold));
17179
- if (hold) {
17180
- const kind = hold.kind.toNumber();
17181
- effects.releasedHolds.push({ counterpart: t.entitytarget, kind });
17182
- if (kind === 1 ) {
17183
- effects.refunds.push({ giver: t.entitytarget, cargo: t.cargo });
17184
- const giver = counterpart;
17185
- if (giver) {
17186
- const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
17187
- const cap = giver.capacity
17188
- ? giver.capacity.toNumber()
17189
- : Number.MAX_SAFE_INTEGER;
17190
- if (giver.cargomass.toNumber() + returned > cap) {
17191
- return {
17192
- ok: false,
17193
- blockedReason: CancelBlockReason.WOULD_OVERFILL,
17194
- range,
17195
- effects: { ...EMPTY_EFFECTS },
17196
- };
17197
- }
18894
+ if (t.type.equals(TaskType.BUILDPLOT) && t.couplings.length > 0)
18895
+ effects.keepsPlotDeposits = { plot: t.couplings[0].counterpart };
18896
+ for (const c of t.couplings) {
18897
+ const kind = c.kind.toNumber();
18898
+ effects.releasedHolds.push({ counterpart: c.counterpart, kind });
18899
+ if (kind === HoldKind.PULL) {
18900
+ effects.refunds.push({ giver: c.counterpart, cargo: t.cargo });
18901
+ const giver = input.counterparts?.get(c.counterpart.entity_id.toString());
18902
+ if (giver) {
18903
+ const returned = t.cargo.reduce((s, c) => s + calcCargoItemMass(c).toNumber(), 0);
18904
+ const cap = giver.capacity ? giver.capacity.toNumber() : Number.MAX_SAFE_INTEGER;
18905
+ if (giver.cargomass.toNumber() + returned > cap) {
18906
+ return {
18907
+ ok: false,
18908
+ blockedReason: CancelBlockReason.WOULD_OVERFILL,
18909
+ range,
18910
+ effects: { ...EMPTY_EFFECTS },
18911
+ };
17198
18912
  }
17199
18913
  }
17200
18914
  }
@@ -17227,7 +18941,7 @@ function derivedLoaders(lanes) {
17227
18941
  function acceleration(thrust, mass) {
17228
18942
  if (mass <= 0)
17229
18943
  return 0;
17230
- return (thrust / mass) * PRECISION$1;
18944
+ return (thrust / mass) * PRECISION;
17231
18945
  }
17232
18946
  function flightTime(distance, accel) {
17233
18947
  if (accel <= 0 || distance <= 0)
@@ -17237,7 +18951,7 @@ function flightTime(distance, accel) {
17237
18951
  function distance2d(ax, ay, bx, by) {
17238
18952
  const dx = ax - bx;
17239
18953
  const dy = ay - by;
17240
- return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION$1);
18954
+ return Math.floor(Math.sqrt(dx * dx + dy * dy) * PRECISION);
17241
18955
  }
17242
18956
  function unwrapTransitDuration(itemMass, origin, dest) {
17243
18957
  if (itemMass <= 0)
@@ -17402,10 +19116,10 @@ function hasGatherer(e) {
17402
19116
  function maxTravelDistance(entity) {
17403
19117
  return UInt32.from(entity.generator.capacity)
17404
19118
  .dividing(entity.engines.drain)
17405
- .multiplying(PRECISION$1);
19119
+ .multiplying(PRECISION);
17406
19120
  }
17407
19121
  function calcEnergyUsage(entity, distance) {
17408
- return distance.dividing(PRECISION$1).multiplying(entity.engines.drain);
19122
+ return distance.multiplying(entity.engines.drain).dividing(PRECISION);
17409
19123
  }
17410
19124
  function energyPercent(entity) {
17411
19125
  return (Number(entity.energy) / Number(entity.generator.capacity)) * 100;
@@ -17440,13 +19154,12 @@ function calc_gather_rate(gatherer, itemMass, stratum, richness) {
17440
19154
  function calc_gather_energy(gatherer, duration) {
17441
19155
  if (duration <= 0)
17442
19156
  return UInt32.from(0);
17443
- const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION$1);
17444
- return UInt32.from(Math.min(Math.max(raw, 1), 4294967295));
19157
+ const raw = Math.floor((duration * gatherer.drain.toNumber()) / PRECISION);
19158
+ return UInt32.from(Math.min(Math.max(raw, 1000), 4294967295));
17445
19159
  }
17446
19160
 
17447
19161
  const BASE_HAUL_PENALTY_MILLI = 300;
17448
19162
  const HAULER_EFFICIENCY_DENOM = 10000;
17449
- const PRECISION = 10000;
17450
19163
  function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17451
19164
  if (haulCount === 0)
17452
19165
  return totalThrust;
@@ -17455,9 +19168,6 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
17455
19168
  HAULER_EFFICIENCY_DENOM);
17456
19169
  return Math.floor((totalThrust * 1000) / penaltyMilli);
17457
19170
  }
17458
- function computeHaulerDrain(distance, drain, haulCount) {
17459
- return Math.floor(distance / PRECISION) * drain * haulCount;
17460
- }
17461
19171
 
17462
19172
  const categoryColors = {
17463
19173
  ore: '#C26D3F',
@@ -17614,8 +19324,17 @@ const capabilityAttributes = [
17614
19324
  attribute: 'capacity',
17615
19325
  description: 'Cargo capacity added by hulls and installed Cargo Hold modules',
17616
19326
  },
19327
+ {
19328
+ capability: 'Storage',
19329
+ attribute: 'drain',
19330
+ description: 'Fixed normal-travel drain contributed by an installed Cargo Hold',
19331
+ },
17617
19332
  { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
17618
- { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
19333
+ {
19334
+ capability: 'Movement',
19335
+ attribute: 'drain',
19336
+ description: 'Total installed energy consumed per tile of normal travel',
19337
+ },
17619
19338
  {
17620
19339
  capability: 'Energy',
17621
19340
  attribute: 'capacity',
@@ -17656,7 +19375,7 @@ const capabilityAttributes = [
17656
19375
  {
17657
19376
  capability: 'Hauling',
17658
19377
  attribute: 'drain',
17659
- description: 'Energy consumed per target during haul-beam operation',
19378
+ description: 'Fixed normal-travel drain contributed by an installed Tractor Beam',
17660
19379
  },
17661
19380
  ];
17662
19381
  const invertedAttributes = new Set(['drain', 'mass']);
@@ -18022,6 +19741,20 @@ function rollupCrafter(lanes) {
18022
19741
  drain: UInt32.from(totalDrain),
18023
19742
  };
18024
19743
  }
19744
+ function rollupBuilder(lanes) {
19745
+ if (lanes.length === 0)
19746
+ return undefined;
19747
+ let totalSpeed = 0;
19748
+ let totalDrain = 0;
19749
+ for (const l of lanes) {
19750
+ totalSpeed += Number(l.speed);
19751
+ totalDrain += Number(l.drain);
19752
+ }
19753
+ return {
19754
+ speed: UInt16.from(Math.min(totalSpeed, 65535)),
19755
+ drain: UInt32.from(totalDrain),
19756
+ };
19757
+ }
18025
19758
  function rollupLoaders(lanes) {
18026
19759
  if (lanes.length === 0)
18027
19760
  return undefined;
@@ -18125,8 +19858,8 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18125
19858
  return {
18126
19859
  capability: 'Generator',
18127
19860
  attributes: [
18128
- { label: 'Capacity', value: caps.capacity },
18129
- { label: 'Recharge', value: caps.recharge },
19861
+ { label: 'Capacity', value: toWholeEnergy$1(caps.capacity) },
19862
+ { label: 'Recharge', value: toWholeEnergy$1(caps.recharge) },
18130
19863
  ],
18131
19864
  };
18132
19865
  }
@@ -18136,7 +19869,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18136
19869
  capability: 'Gatherer',
18137
19870
  attributes: [
18138
19871
  { label: 'Yield', value: caps.yield },
18139
- { label: 'Drain', value: caps.drain },
19872
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18140
19873
  { label: 'Depth', value: caps.depth },
18141
19874
  ],
18142
19875
  };
@@ -18158,7 +19891,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18158
19891
  capability: 'Crafting',
18159
19892
  attributes: [
18160
19893
  { label: 'Speed', value: caps.speed },
18161
- { label: 'Drain', value: caps.drain },
19894
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18162
19895
  ],
18163
19896
  };
18164
19897
  }
@@ -18169,12 +19902,12 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18169
19902
  attributes: [
18170
19903
  { label: 'Capacity', value: caps.capacity },
18171
19904
  { label: 'Efficiency', value: caps.efficiency },
18172
- { label: 'Drain', value: caps.drain },
19905
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18173
19906
  ],
18174
19907
  };
18175
19908
  }
18176
19909
  case MODULE_STORAGE: {
18177
- const caps = computeStorageCapabilities(stats);
19910
+ const caps = computeStorageCapabilities(stats, tier);
18178
19911
  return {
18179
19912
  capability: 'Storage',
18180
19913
  attributes: [
@@ -18182,6 +19915,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18182
19915
  label: 'Cargo Capacity',
18183
19916
  value: applySlotMultiplierUint32(caps.capacity, outputPct),
18184
19917
  },
19918
+ { label: 'Drain', value: toWholeEnergy$1(caps.drain) },
18185
19919
  ],
18186
19920
  };
18187
19921
  }
@@ -18192,7 +19926,7 @@ function computeCapabilityGroup(moduleType, stats, tier, outputPct = 100) {
18192
19926
  attributes: [
18193
19927
  {
18194
19928
  label: 'Energy Capacity',
18195
- value: applySlotMultiplierUint32(caps.capacity, outputPct),
19929
+ value: toWholeEnergy$1(applySlotMultiplierUint32(caps.capacity, outputPct)),
18196
19930
  },
18197
19931
  ],
18198
19932
  };
@@ -18234,10 +19968,19 @@ function resolveModule(id, stats) {
18234
19968
  attributes,
18235
19969
  };
18236
19970
  }
18237
- function hullCapsForEntity(itemId, decoded) {
19971
+ function hullCapsForEntity(itemId, decoded, packedStats) {
19972
+ const hullStats = getPackedEntityType(itemId)?.equals(ENTITY_SHIP)
19973
+ ? {
19974
+ strength: decodeStat(packedStats, 0),
19975
+ hardness: decodeStat(packedStats, 1),
19976
+ plasticity: decodeStat(packedStats, 2),
19977
+ volatility: decodeStat(packedStats, 3),
19978
+ conductivity: decodeStat(packedStats, 4),
19979
+ }
19980
+ : decoded;
18238
19981
  return {
18239
- hullmass: computeBaseHullmass(decoded),
18240
- capacity: computeBaseCapacity(itemId, decoded),
19982
+ hullmass: computeBaseHullmass(itemId, hullStats),
19983
+ capacity: computeBaseCapacity(itemId, hullStats),
18241
19984
  };
18242
19985
  }
18243
19986
  function resolveEntity(id, stats, modules) {
@@ -18254,7 +19997,7 @@ function resolveEntity(id, stats, modules) {
18254
19997
  decoded.density = decodeStat(bigStats, 1);
18255
19998
  if (decoded.hardness === undefined)
18256
19999
  decoded.hardness = decodeStat(bigStats, 2);
18257
- const hullCaps = hullCapsForEntity(id, decoded);
20000
+ const hullCaps = hullCapsForEntity(id, decoded, bigStats);
18258
20001
  attributes = [
18259
20002
  {
18260
20003
  capability: 'Hull',
@@ -18490,6 +20233,9 @@ function moduleSlotsForImmutable(modules) {
18490
20233
  }));
18491
20234
  }
18492
20235
  const IMAGE_HOST_URL = 'https://item.shiploadgame.com/item';
20236
+ function toWholeEnergy(milli) {
20237
+ return Math.floor((milli + 500) / 1000);
20238
+ }
18493
20239
  function bytesToBase64Url(bytes) {
18494
20240
  let binary = '';
18495
20241
  for (let i = 0; i < bytes.byteLength; i++)
@@ -18555,8 +20301,14 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18555
20301
  const thm = decodeStat(stats, 1);
18556
20302
  base.push({ first: 'volatility', second: ['uint16', vol] });
18557
20303
  base.push({ first: 'thermal', second: ['uint16', thm] });
18558
- base.push({ first: 'thrust', second: ['uint32', computeEngineThrust(vol)] });
18559
- base.push({ first: 'drain', second: ['uint16', computeEngineDrain(thm)] });
20304
+ base.push({
20305
+ first: 'thrust',
20306
+ second: ['uint32', computeEngineThrust(computeEffectiveModuleStat(vol))],
20307
+ });
20308
+ base.push({
20309
+ first: 'drain',
20310
+ second: ['uint16', computeEngineDrain(computeEffectiveModuleStat(thm))],
20311
+ });
18560
20312
  break;
18561
20313
  }
18562
20314
  case MODULE_GENERATOR: {
@@ -18564,8 +20316,20 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18564
20316
  const ref = decodeStat(stats, 1);
18565
20317
  base.push({ first: 'resonance', second: ['uint16', res] });
18566
20318
  base.push({ first: 'reflectivity', second: ['uint16', ref] });
18567
- base.push({ first: 'capacity', second: ['uint16', computeGeneratorCap(res)] });
18568
- base.push({ first: 'recharge', second: ['uint16', computeGeneratorRech(ref)] });
20319
+ base.push({
20320
+ first: 'capacity',
20321
+ second: [
20322
+ 'uint16',
20323
+ toWholeEnergy(computeGeneratorCap(computeEffectiveModuleStat(res))),
20324
+ ],
20325
+ });
20326
+ base.push({
20327
+ first: 'recharge',
20328
+ second: [
20329
+ 'uint16',
20330
+ toWholeEnergy(computeGeneratorRech(computeEffectiveModuleStat(ref))),
20331
+ ],
20332
+ });
18569
20333
  break;
18570
20334
  }
18571
20335
  case MODULE_GATHERER: {
@@ -18576,7 +20340,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18576
20340
  base.push({ first: 'hardness', second: ['uint16', hrd] });
18577
20341
  base.push({ first: 'saturation', second: ['uint16', sat] });
18578
20342
  base.push({ first: 'yield', second: ['uint16', computeGathererYield(str)] });
18579
- base.push({ first: 'drain', second: ['uint16', computeGathererDrain(sat)] });
20343
+ base.push({
20344
+ first: 'drain',
20345
+ second: ['uint16', toWholeEnergy(computeGathererDrain(sat))],
20346
+ });
18580
20347
  base.push({ first: 'depth', second: ['uint16', computeGathererDepth(hrd, item.tier)] });
18581
20348
  break;
18582
20349
  }
@@ -18601,7 +20368,16 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18601
20368
  base.push({ first: 'fineness', second: ['uint16', fin] });
18602
20369
  base.push({ first: 'conductivity', second: ['uint16', con] });
18603
20370
  base.push({ first: 'speed', second: ['uint16', computeCrafterSpeed(fin)] });
18604
- base.push({ first: 'drain', second: ['uint16', computeCrafterDrain(con)] });
20371
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeCrafterDrain(con))] });
20372
+ break;
20373
+ }
20374
+ case MODULE_BUILDER: {
20375
+ const coh = decodeStat(stats, 0);
20376
+ const tol = decodeStat(stats, 1);
20377
+ base.push({ first: 'cohesion', second: ['uint16', coh] });
20378
+ base.push({ first: 'tolerance', second: ['uint16', tol] });
20379
+ base.push({ first: 'speed', second: ['uint16', computeBuilderSpeed(coh)] });
20380
+ base.push({ first: 'drain', second: ['uint16', toWholeEnergy(computeBuilderDrain(tol))] });
18605
20381
  break;
18606
20382
  }
18607
20383
  case MODULE_STORAGE: {
@@ -18615,7 +20391,11 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18615
20391
  base.push({ first: 'cohesion', second: ['uint16', com] });
18616
20392
  base.push({
18617
20393
  first: 'capacity',
18618
- second: ['uint32', computeCargoBayCapacity(str, den, hrd, com)],
20394
+ second: ['uint32', computeCargoBayCapacity(str, den, hrd)],
20395
+ });
20396
+ base.push({
20397
+ first: 'drain',
20398
+ second: ['uint16', toWholeEnergy(computeCargoBayDrain(com, item.tier))],
18619
20399
  });
18620
20400
  break;
18621
20401
  }
@@ -18630,7 +20410,7 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18630
20410
  base.push({ first: 'insulation', second: ['uint16', ins] });
18631
20411
  base.push({
18632
20412
  first: 'capacity',
18633
- second: ['uint32', computeBatteryBankCapacity(vol, thm, pla, ins)],
20413
+ second: ['uint32', toWholeEnergy(computeBatteryBankCapacity(vol, thm, pla, ins))],
18634
20414
  });
18635
20415
  break;
18636
20416
  }
@@ -18643,7 +20423,10 @@ function buildModuleImmutable(itemId, quantity, stats, originX, originY) {
18643
20423
  base.push({ first: 'conductivity', second: ['uint16', con] });
18644
20424
  base.push({ first: 'capacity', second: ['uint8', computeHaulerCapacity(res, item.tier)] });
18645
20425
  base.push({ first: 'efficiency', second: ['uint16', computeHaulerEfficiency(pla)] });
18646
- base.push({ first: 'drain', second: ['uint16', computeHaulerDrain$1(con)] });
20426
+ base.push({
20427
+ first: 'drain',
20428
+ second: ['uint16', toWholeEnergy(computeHaulerDrain(con, item.tier))],
20429
+ });
18647
20430
  break;
18648
20431
  }
18649
20432
  }
@@ -18696,6 +20479,7 @@ var index = /*#__PURE__*/Object.freeze({
18696
20479
  deserializeModule: deserializeModule,
18697
20480
  deserializeEntity: deserializeEntity,
18698
20481
  deserializeAsset: deserializeAsset,
20482
+ toWholeEnergy: toWholeEnergy$1,
18699
20483
  computeBaseHullmass: computeBaseHullmass$1,
18700
20484
  computeBaseCapacityShip: computeBaseCapacityShip,
18701
20485
  computeBaseCapacityContainer: computeBaseCapacityContainer,
@@ -18715,9 +20499,13 @@ var index = /*#__PURE__*/Object.freeze({
18715
20499
  computeLoaderThrust: computeLoaderThrust,
18716
20500
  computeCrafterSpeed: computeCrafterSpeed,
18717
20501
  computeCrafterDrain: computeCrafterDrain,
20502
+ computeBuilderSpeed: computeBuilderSpeed,
20503
+ computeBuilderDrain: computeBuilderDrain,
18718
20504
  computeHaulerCapacity: computeHaulerCapacity,
18719
20505
  computeHaulerEfficiency: computeHaulerEfficiency,
18720
- computeHaulerDrain: computeHaulerDrain$1,
20506
+ supportDrainTierPercent: supportDrainTierPercent,
20507
+ computeHaulerDrain: computeHaulerDrain,
20508
+ computeCargoBayDrain: computeCargoBayDrain,
18721
20509
  computeWarpRange: computeWarpRange,
18722
20510
  computeCargoBayCapacity: computeCargoBayCapacity,
18723
20511
  computeBatteryBankCapacity: computeBatteryBankCapacity,
@@ -18963,5 +20751,5 @@ function planParallelTransfer(entity, target) {
18963
20751
  return allocateProportional(laneWeights, requestedQty).filter((e) => e.quantity > 0);
18964
20752
  }
18965
20753
 
18966
- export { ALL_ENTITY_TYPES, ATOMICASSETS_ACCOUNT, ActionsManager, BASE_HAUL_PENALTY_MILLI$1 as BASE_HAUL_PENALTY_MILLI, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CAPACITY_TIER_TABLE, CAP_DEMOLISH, CAP_MODULES, CAP_UNDEPLOY, CAP_WRAP, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, COMPONENT_TIER_PREFIXES, CONTAINER_NOT_FOUND, CONTAINER_Z, COORD_MAX, COORD_MIN, COORD_OFFSET, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, CancelBlockReason, ClusterManager, ConstructionManager, Coordinates, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENGINE_DRAIN_BASE, ENGINE_DRAIN_REF_THM, ENGINE_DRAIN_REF_THRUST, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_HUB, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NEXUS, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, Entity, EntityClass, EntityInventory, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_MASS_DIVISOR, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, HAULER_EFFICIENCY_DENOM$1 as HAULER_EFFICIENCY_DENOM, HoldKind, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BATTERY_T1, ITEM_BEAM, ITEM_BEAM_T2, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_CERAMIC, ITEM_CERAMIC_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FRAME, ITEM_FRAME_T2, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GATHERER_T2, ITEM_GENERATOR_T1, ITEM_HAULER_SHIP_T2_PACKED, ITEM_HAULER_T1, ITEM_HAULER_T2, ITEM_HUB_T1_PACKED, ITEM_LAUNCHER_T1, ITEM_LOADER_T1, ITEM_MASS_CATCHER_T1_PACKED, ITEM_MASS_DRIVER_T1_PACKED, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_PLASMA_CELL, ITEM_PLASMA_CELL_T2, ITEM_PLATE, ITEM_PLATE_T2, ITEM_POLYMER, ITEM_POLYMER_T2, ITEM_PROSPECTOR_T2_PACKED, ITEM_REACTOR, ITEM_REACTOR_T2, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_RESIN, ITEM_RESIN_T2, ITEM_RESONATOR, ITEM_RESONATOR_T2, ITEM_SENSOR, ITEM_SENSOR_T2, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, InventoryAccessor, LANE_BARRIER, LANE_MOBILITY, LOCAL_HALF, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_LEGS, MAX_ORBITAL_ALTITUDE, MAX_STARS_PER_STAT, MAX_STAR_RATING, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL, MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE, MODULE_ANY, MODULE_BATTERY, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STORAGE, MODULE_TIER_PREFIXES, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, NftManager, PLANETARY_STRUCTURE_Z, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PLAYER_NOT_JOINED, PRECISION$1 as PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REGION_DIV, REGION_PER_AXIS, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, RESOURCE_TIER_ADJECTIVES, RESOURCE_TIER_MULT_TENTHS, SECTORS_PER_AXIS, SECTOR_DIV, SHIPLOAD_COLLECTION, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STAR_STEP, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Shipload, SubscriptionsManager, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, WH, WOULD_OVERFILL, WOULD_STRAND, WebSocketConnection, YIELD_FRACTION_DEEP, YIELD_FRACTION_SHALLOW, addressFromCoordinates, allBuildableItems, allPlotBuildableItems, allocateProportional, applyCapacityTier, applyResourceTierMultiplier, availableBuildMethods, availableCapacity, availableCapacityFromMass, availableForItem, baseName, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildComponentImmutable, buildEntityDescription, buildEntityImmutable, buildGatherPlan, buildImmutableData, buildMintAssetAction, buildModuleImmutable, buildResourceImmutable, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcStacksMass, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_gather_rate, calc_group_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_onesided_duration, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calc_transit_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, cancelEligibility, candidateLaneCompletesAt, capabilityAttributes, capabilityNames, capacityTierMultiplier, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLauncher, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItem, cargoItemToStack, cargoReadyAt, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryLabel, categoryLabelFromIndex, compareByStars, componentIcon, composeIdleResolve, computeBaseCapacity, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass$1 as computeBaseHullmass, computeBatteryCapabilities, computeComponentStats, computeContainerCapabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityCapabilities, computeEntityStats, computeFreeCells, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeGroupPerLegReach, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerDrain, computeHaulerEfficiency, computeInputMass, computeLauncherCapabilities, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeNftImageUrl, computePerLegReach, computeShipHullCapabilities, computeStorageCapabilities, computeTravelDrain, computeWarehouseHullCapabilities, computeWarpCapabilities, computeWarpRange, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeAddress, decodeAtomicAsset, decodeCraftedItemStats, decodeRegion, decodeSector, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, derivedLoaders, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, eligibleUpgrades, encodeAddress, encodeAddressMemo, encodeGatheredCargoStats, encodeRegion, encodeSector, encodeStats, energyAtTime, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, estimateUnwrapDuration, feistel, feistelInv, fetchAtomicAssetsForOwner, fetchAtomicSchemas, filterByBuildMethod, findNearbyPlanets, flightSpeedFactor, formatLocation, formatMass, formatMassDelta, formatMassScaled, formatModuleLine, formatTier, gatherEnergyCost, gathererDepthForTier, getAllRecipes, getCapabilityAttributeRows, getCapabilityAttributes, getCategoryInfo, getComponentDemand, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEffectiveReserve, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getKindMeta, getLocationCandidates, getLocationKind, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getProducersForAttribute, getRecipe, getRecipeConsumers, getResourceDemand, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, getTemplateMeta, hasEnergy, hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, incomingHoldMass, interpolateFlightPosition, isBuildable, isContainer, isCraftedItem, isExtractor, isFactory, isFull, isFullFromMass, isGatherableLocation, isHub, isInvertedAttribute, isLocationBuildable, isModuleItem, isNexus, isPlot, isPlotBuildable, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isValidWormholePair, isWarehouse, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, kindCan, laneKeyForModule, lerp$1 as lerp, makeEntity, mapEntity, maxCraftable, maxQtyForCharge, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, nearbyWormholes, needsRecharge, normalizeDisplayName, parseWireEntity, partnerRegion, planParallelTransfer, planRoute, projectEntity, projectEntityAt, projectRemainingAt, projectedCargoAvailableAt, projectedPeakCargomass, rawScheduleEnd, readCommonBase, receiveFits, regionOf, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveLaneCrafter, resolveLaneGatherer, resolveLaneLoader, resolveLockedAmount, resolveStats, rollTier, rollWithinTier, rollupCrafter, rollupGatherer, rollupLoaders, rotation, schedule, sdkSystemGraph, selectGatherLane, setScanProvider, setSubscriptionsDebug, simulateRoute, slotAcceptsModule, sourceLabelForOutput, splitCost, stackKey, stackToCargoItem, stacksEqual, starRating, starsForStat, statMagnitude, subtractFromStacks, taskCargoChanges, taskCargoEffect, tierAdjective, tierColors, tierOfReserve, toLocation, typeLabel, unwrapLoadDuration, unwrapTransitDuration, validateDisplayName, validateSchedule, workerLaneKey, wormholeAt, wormholeAtRegionEndpoint, yieldThresholdAt };
20754
+ export { ALL_ENTITY_TYPES, ATOMICASSETS_ACCOUNT, ActionsManager, BASE_HAUL_PENALTY_MILLI$1 as BASE_HAUL_PENALTY_MILLI, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CAPACITY_TIER_TABLE, CAP_DEMOLISH, CAP_MODULES, CAP_UNDEPLOY, CAP_WRAP, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, COMPONENT_TIER_PREFIXES, CONTAINER_NOT_FOUND, CONTAINER_Z, COORD_MAX, COORD_MIN, COORD_OFFSET, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, CancelBlockReason, ClusterManager, ConstructionManager, Coordinates, DEFAULT_BASE_HULLMASS, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENGINE_DRAIN_BASE, ENGINE_DRAIN_REF_THM, ENGINE_DRAIN_REF_THRUST, ENTITY_ALREADY_THERE, ENTITY_CAPACITY_EXCEEDED, ENTITY_CARGO_NOT_LOADED, ENTITY_CARGO_NOT_OWNED, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_FACTORY, ENTITY_HUB, ENTITY_INVALID_CARGO, ENTITY_INVALID_DESTINATION, ENTITY_INVALID_TRAVEL_DURATION, ENTITY_NEXUS, ENTITY_NOT_ENOUGH_ENERGY, ENTITY_NOT_ENOUGH_ENERGY_CAPACITY, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, ENTITY_WORKSHOP, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, Entity, EntityClass, EntityInventory, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_MASS_DIVISOR, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, HAULER_EFFICIENCY_DENOM$1 as HAULER_EFFICIENCY_DENOM, HoldKind, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BATTERY_T1, ITEM_BEAM, ITEM_BEAM_T2, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_BUILDER_T1, ITEM_CERAMIC, ITEM_CERAMIC_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_DREDGER_T1_PACKED, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FACTORY_T1_PACKED, ITEM_FRAME, ITEM_FRAME_T2, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GATHERER_T2, ITEM_GENERATOR_T1, ITEM_HAULER_SHIP_T2_PACKED, ITEM_HAULER_T1, ITEM_HAULER_T2, ITEM_HUB_T1_PACKED, ITEM_LAUNCHER_T1, ITEM_LOADER_T1, ITEM_MASS_CATCHER_T1_PACKED, ITEM_MASS_DRIVER_T1_PACKED, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_PLASMA_CELL, ITEM_PLASMA_CELL_T2, ITEM_PLATE, ITEM_PLATE_T2, ITEM_POLYMER, ITEM_POLYMER_T2, ITEM_PORTER_T1_PACKED, ITEM_PROSPECTOR_T1_PACKED, ITEM_PROSPECTOR_T2_PACKED, ITEM_REACTOR, ITEM_REACTOR_T2, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_RESIN, ITEM_RESIN_T2, ITEM_RESONATOR, ITEM_RESONATOR_T2, ITEM_ROUSTABOUT_T1_PACKED, ITEM_SENSOR, ITEM_SENSOR_T2, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_TENDER_T1_PACKED, ITEM_TUG_T1_PACKED, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, ITEM_WORKSHOP_T1_PACKED, ITEM_WRANGLER_T1_PACKED, ITEM_WRIGHT_T1_PACKED, InventoryAccessor, JOB_QUEUE_CAP, LANE_BARRIER, LANE_MOBILITY, LOCAL_HALF, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_LEGS, MAX_ORBITAL_ALTITUDE, MAX_STARS_PER_STAT, MAX_STAR_RATING, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE_ORBITAL_VESSEL, MIN_TRANSFER_DISTANCE_PLANETARY_STRUCTURE, MODULE_ANY, MODULE_BATTERY, MODULE_BUILDER, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STAT_SCALING_ANCHOR, MODULE_STAT_SCALING_POST_ANCHOR_PERCENT, MODULE_STORAGE, MODULE_TIER_PREFIXES, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, NftManager, PLANETARY_STRUCTURE_Z, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PLAYER_NOT_JOINED, PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REGION_DIV, REGION_PER_AXIS, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, RESOURCE_TIER_ADJECTIVES, RESOURCE_TIER_MULT_TENTHS, SECTORS_PER_AXIS, SECTOR_DIV, SHIPLOAD_COLLECTION, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_NOT_ARRIVED, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, SLOT_FORMULAS, STAR_STEP, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Shipload, SubscriptionsManager, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, WH, WOULD_OVERFILL, WOULD_STRAND, WebSocketConnection, YIELD_FRACTION_DEEP, YIELD_FRACTION_SHALLOW, addressFromCoordinates, allBuildableItems, allPlotBuildableItems, allocateProportional, applyCapacityTier, applyResourceTierMultiplier, availableBuildMethods, availableCapacity, availableCapacityFromMass, availableForItem, baseName, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildComponentImmutable, buildEntityDescription, buildEntityImmutable, buildGatherPlan, buildImmutableData, buildMintAssetAction, buildModuleImmutable, buildResourceImmutable, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcStacksMass, calc_acceleration, calc_build_duration, calc_build_energy, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, calc_gather_rate, calc_group_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_onesided_duration, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calc_transit_duration, calc_travel_flighttime, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, cancelEligibility, candidateLaneCompletesAt, capabilityAttributes, capabilityNames, capacityTierMultiplier, capsHasCrafter, capsHasGatherer, capsHasHauler, capsHasLauncher, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItem, cargoItemToStack, cargoReadyAt, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryLabel, categoryLabelFromIndex, compareByStars, componentIcon, composeIdleResolve, computeBaseCapacity, computeBaseCapacityContainer, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass$1 as computeBaseHullmass, computeBatteryCapabilities, computeBuilderCapabilities, computeBuilderDrain, computeBuilderSpeed, computeComponentStats, computeContainerCapabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEffectiveModuleStat, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityCapabilities, computeEntityStats, computeFreeCells, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeGroupPerLegReach, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerEfficiency, computeInputMass, computeLauncherCapabilities, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeNftImageUrl, computePerLegReach, computeShipHullCapabilities, computeStorageCapabilities, computeTravelDrain, computeWarehouseHullCapabilities, computeWarpCapabilities, computeWarpRange, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeAddress, decodeAtomicAsset, decodeCraftedItemStats, decodeRegion, decodeSector, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, derivedLoaders, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, eligibleUpgrades, encodeAddress, encodeAddressMemo, encodeGatheredCargoStats, encodeRegion, encodeSector, encodeStats, energyAtTime, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, estimateUnwrapDuration, feistel, feistelInv, fetchAtomicAssetsForOwner, fetchAtomicSchemas, filterByBuildMethod, findNearbyPlanets, flightSpeedFactor, formatLocation, formatMass, formatMassDelta, formatMassScaled, formatModuleLine, formatTier, gatherEnergyCost, gathererDepthForTier, getAllRecipes, getBaseHullmassFor, getCapabilityAttributeRows, getCapabilityAttributes, getCategoryInfo, getComponentDemand, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEffectiveReserve, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getKindMeta, getLocationCandidates, getLocationKind, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getProducersForAttribute, getRecipe, getRecipeConsumers, getResourceDemand, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, getTemplateMeta, hasEnergy, hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, incomingHoldMass, interpolateFlightPosition, isBuildable, isContainer, isCraftedItem, isExtractor, isFactory, isFull, isFullFromMass, isGatherableLocation, isHub, isInvertedAttribute, isLocationBuildable, isModuleItem, isNexus, isPlot, isPlotBuildable, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isValidWormholePair, isWarehouse, isWorkshop, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, jobsToLanes, kindCan, laneKeyForModule, lerp$1 as lerp, makeEntity, mapEntity, maxCraftable, maxQtyForCharge, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, nearbyWormholes, needsRecharge, normalizeDisplayName, parseWireEntity, partnerRegion, pickFabricator, planParallelTransfer, planRoute, projectEntity, projectEntityAt, projectRemainingAt, projectedCargoAvailableAt, projectedPeakCargomass, rawScheduleEnd, readCommonBase, receiveFits, regionOf, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveLaneBuilder, resolveLaneCrafter, resolveLaneGatherer, resolveLaneLoader, resolveLockedAmount, resolveStats, rollTier, rollWithinTier, rollupBuilder, rollupCrafter, rollupGatherer, rollupLoaders, rotation, schedule, sdkSystemGraph, selectGatherLane, setSubscriptionsDebug, simulateRoute, slotAcceptsModule, socketTail, sourceLabelForOutput, splitCost, stackKey, stackToCargoItem, stacksEqual, starRating, starsForStat, statMagnitude, subtractFromStacks, taskCargoChanges, taskCargoEffect, tierAdjective, tierColors, tierOfReserve, toLocation, typeLabel, unwrapLoadDuration, unwrapTransitDuration, validateDisplayName, validateSchedule, workerLaneKey, wormholeAt, wormholeAtRegionEndpoint, yieldThresholdAt };
18967
20755
  //# sourceMappingURL=shipload.m.js.map