@black-market/sdk 0.9.1 → 0.11.0

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 (72) hide show
  1. package/README.md +23 -17
  2. package/dist/lifecycle/abi.d.ts +1 -0
  3. package/dist/lifecycle/abi.d.ts.map +1 -1
  4. package/dist/lifecycle/abi.js +1 -0
  5. package/dist/lifecycle/abi.js.map +1 -1
  6. package/dist/lifecycle/calibration.d.ts.map +1 -1
  7. package/dist/lifecycle/calibration.js +2 -0
  8. package/dist/lifecycle/calibration.js.map +1 -1
  9. package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.d.ts → hmm-dynamic-pool-hook-v2-20261017.d.ts} +21 -21
  10. package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.d.ts.map → hmm-dynamic-pool-hook-v2-20261017.d.ts.map} +1 -1
  11. package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v2-20261017.js +69 -0
  12. package/dist/lifecycle/deployments/{hmm-dynamic-pool-hook-v1-20261011.js.map → hmm-dynamic-pool-hook-v2-20261017.js.map} +1 -1
  13. package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.d.ts → hmm-fixed-pool-hook-v2-20261017.d.ts} +21 -21
  14. package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.d.ts.map → hmm-fixed-pool-hook-v2-20261017.d.ts.map} +1 -1
  15. package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v2-20261017.js +69 -0
  16. package/dist/lifecycle/deployments/{hmm-fixed-pool-hook-v1-20261011.js.map → hmm-fixed-pool-hook-v2-20261017.js.map} +1 -1
  17. package/dist/lifecycle/hmm-abi.d.ts +4544 -0
  18. package/dist/lifecycle/hmm-abi.d.ts.map +1 -0
  19. package/dist/lifecycle/hmm-abi.js +299 -0
  20. package/dist/lifecycle/hmm-abi.js.map +1 -0
  21. package/dist/lifecycle/hmm.d.ts +19 -3
  22. package/dist/lifecycle/hmm.d.ts.map +1 -1
  23. package/dist/lifecycle/hmm.js +11 -7
  24. package/dist/lifecycle/hmm.js.map +1 -1
  25. package/dist/lifecycle/markets.d.ts.map +1 -1
  26. package/dist/lifecycle/markets.js +2 -0
  27. package/dist/lifecycle/markets.js.map +1 -1
  28. package/dist/lifecycle/planner.d.ts.map +1 -1
  29. package/dist/lifecycle/planner.js +44 -35
  30. package/dist/lifecycle/planner.js.map +1 -1
  31. package/dist/lifecycle/presets.d.ts +7 -2
  32. package/dist/lifecycle/presets.d.ts.map +1 -1
  33. package/dist/lifecycle/presets.js +19 -5
  34. package/dist/lifecycle/presets.js.map +1 -1
  35. package/dist/lifecycle/rpc.js +3 -2
  36. package/dist/lifecycle/rpc.js.map +1 -1
  37. package/dist/lifecycle/simulation.d.ts +1 -1
  38. package/dist/lifecycle/simulation.d.ts.map +1 -1
  39. package/dist/lifecycle/simulation.js +115 -174
  40. package/dist/lifecycle/simulation.js.map +1 -1
  41. package/dist/lifecycle/transactions.d.ts +6 -0
  42. package/dist/lifecycle/transactions.d.ts.map +1 -1
  43. package/dist/lifecycle/transactions.js +39 -0
  44. package/dist/lifecycle/transactions.js.map +1 -1
  45. package/dist/lifecycle/types.d.ts +6 -3
  46. package/dist/lifecycle/types.d.ts.map +1 -1
  47. package/dist/lifecycle/types.js.map +1 -1
  48. package/docs/launch-lifecycle.md +197 -86
  49. package/examples/.env.example +4 -0
  50. package/examples/README.md +27 -6
  51. package/examples/hmm-launch-config.ts +4 -1
  52. package/examples/launch-example-support.ts +1 -0
  53. package/examples/launch-example.ts +1 -0
  54. package/examples/launch.ts +1 -0
  55. package/package.json +2 -2
  56. package/src/lifecycle/abi.ts +1 -0
  57. package/src/lifecycle/calibration.ts +1 -0
  58. package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v2-20261017.ts +71 -0
  59. package/src/lifecycle/deployments/hmm-fixed-pool-hook-v2-20261017.ts +71 -0
  60. package/src/lifecycle/hmm-abi.ts +302 -0
  61. package/src/lifecycle/hmm.ts +12 -7
  62. package/src/lifecycle/markets.ts +1 -0
  63. package/src/lifecycle/planner.ts +41 -32
  64. package/src/lifecycle/presets.ts +20 -6
  65. package/src/lifecycle/rpc.ts +3 -2
  66. package/src/lifecycle/simulation.ts +111 -165
  67. package/src/lifecycle/transactions.ts +38 -1
  68. package/src/lifecycle/types.ts +9 -4
  69. package/dist/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.js +0 -69
  70. package/dist/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.js +0 -69
  71. package/src/lifecycle/deployments/hmm-dynamic-pool-hook-v1-20261011.ts +0 -71
  72. package/src/lifecycle/deployments/hmm-fixed-pool-hook-v1-20261011.ts +0 -71
@@ -1,71 +0,0 @@
1
- import type { Hex } from "viem";
2
- import type { LaunchEnvelopeV2, AdapterRegistrationV1, ProfileRegistrationV1 } from "../schema.js";
3
-
4
- // Black Market main 1ca9881: pool-hook-template-v1/20261011T220032Z-hmm-dynamic.
5
- // Generated by scripts/generate-hmm-presets.mjs from admission bytes and hash-checked live storage children.
6
- export const hmmDynamicEnvelope = Object.freeze({
7
- artifactDigest: "0x3b8b7ab8614512ce93d65c6aeb6ed18bb150ef7d74417c7282075ff683f1e35b",
8
- reviewManifestDigest: "0x8a82a2331225d17a1bf0f167bfaab0bfba5e7fdf7c83455e13f43610fc17feb3",
9
- configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d",
10
- termsDigest: "0x9863cba9dbd05d748983e5833210bb6a67a02dae396cfca3744ea1c35af59910",
11
- topology: 2,
12
- configVersion: 6,
13
- economicVersion: 3,
14
- capabilities: 123n,
15
- flags: 0n,
16
- callbackFlags: 6908,
17
- callbackMask: 16383,
18
- protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1",
19
- protocolFeeDenominator: 6,
20
- beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783",
21
- maximumDeveloperFeeBps: 0,
22
- bounds: Object.freeze({
23
- minimumTickSpacing: 1,
24
- maximumTickSpacing: 32767,
25
- maximumPositions: 32,
26
- maximumOracleCardinality: 4096,
27
- feeModeFlags: 3,
28
- }),
29
- graph: Object.freeze({
30
- manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
31
- hookRoot: "0x0000000000000000000000000000000000000000",
32
- oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7",
33
- locker: "0xAF96E3594942Ba12DC34e5da7fD4A3f61C2721Bc",
34
- collectorFactory: "0xf86670535e6444735a84025408F47F417d4cAeeA",
35
- collectorDeployer: "0x4F4305423Ad0D8e9fa7CD77be6Fe2bfc50A4BEbA",
36
- hookDeployer: "0x7B7E967E4F0db00a397317Ec3d84903D3bc6eF85",
37
- coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b",
38
- managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",
39
- hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
40
- oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98",
41
- lockerCodeHash: "0xd2dc1ff8416e7524d777d937f7071fc91871fe0e85ce674e1b8a23420e44a3fc",
42
- collectorFactoryCodeHash: "0xc298ea4bb51ed399f84572e9ad2324bf6ada59b5f40c4ddfdd05869abf9a2e25",
43
- collectorDeployerCodeHash: "0x5761744b5ce04faf6a0a1ffcb3ac837d8e048f4420b0be131dfa289559b18c76",
44
- hookDeployerCodeHash: "0x540ae006e2bc08cd7a38a18e72fddd29c73d1fab0c39a42e87297e67f335b982",
45
- hookCreationCodeHash: "0x3b8b7ab8614512ce93d65c6aeb6ed18bb150ef7d74417c7282075ff683f1e35b",
46
- codeChunk0: "0x81abA522890dae0aBC1623C135F0DbD662378d47",
47
- codeChunk0Hash: "0xa46f41e8834c1e19b0d2eac0d296e3911c2c9e717159be00720a8cb4cc535b60",
48
- codeChunk1: "0xf9Aa8888648b5f8C9806c772978F8803645ff44A",
49
- codeChunk1Hash: "0x6976fbf3fcdb32312abfbc7bdd91706b1d70930d3978821cfd47b8943f656fc2",
50
- sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000",
51
- }),
52
- }) satisfies LaunchEnvelopeV2;
53
- export const hmmDynamicAdapter = Object.freeze({
54
- implementation: "0xb2a163646bB3661230f6e6A3c258e809514a748A",
55
- codeHash: "0x087ffe3f38742a8cb94ea30b18c2c6150278685bf24e78b406ffb1ff77d4f4bc",
56
- capabilities: 123n,
57
- configVersion: 6,
58
- enabled: true,
59
- }) satisfies AdapterRegistrationV1;
60
- export const hmmDynamicRegistration = Object.freeze({
61
- adapterId: "0x7fbf1836bab81414a0820c856b45d769a85a60853e92e4a9554e2eedf047dbcf",
62
- configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045",
63
- dependencyDigest: "0x9fc926ed5da5a2132d3eb08c93531cf70b992d600f2a54b319801375d22451f5",
64
- venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
65
- factory: "0x0000000000000000000000000000000000000000",
66
- hook: "0x0000000000000000000000000000000000000000",
67
- capabilities: 123n,
68
- enabled: true,
69
- }) satisfies ProfileRegistrationV1;
70
- // 29434 bytes; keccak256 0x3b8b7ab8614512ce93d65c6aeb6ed18bb150ef7d74417c7282075ff683f1e35b; append 640-byte V2 constructor.
71
- export const hmmDynamicCreationCode: Hex = "0x610260604052348015610010575f5ffd5b506040516172fa3803806172fa83398101604081905261002f91610c9f565b808061003a81610471565b611afc613fff30161461006057604051632a96f9e160e21b815260040160405180910390fd5b80516001600160a01b039081166080908152602080840151831660a0908152604080860151851660c0526060860151851660e0529285015184166101005284015190921661012052516100b591839101610e24565b60408051808303601f1901815291905280516020909101206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052908301519183015160189290921b66ffffffff0000001662ffffff909216919091176101e05260a082015160c08301519082169116105f8161014a578260a00151610150565b8260c001515b90505f82610162578360c00151610168565b8360a001515b6001600160a01b038084166102008190529082166102208190526040805160a081018252928352602083019190915260e087015162ffffff169082015261010086015160020b60608201523060808201529091506101c78160a0902090565b6101405280515f80546001600160a01b03199081166001600160a01b03938416178255602080850151600180546040808901516060808b0151958a166001600160b81b031990941693909317600160a01b62ffffff928316021762ffffff60b81b1916600160b81b91909516029390931782556080808901516002805490971690891617909555825161012081018452958652938b015186169285019290925260c08a0151909416938301939093526101a088015191929083019160ff169081111561029557610295610fc9565b60018111156102a6576102a6610fc9565b815261014087015162ffffff166020808301919091526101c088015160ff166040808401919091526101e08901516001600160a01b039081166060808601919091526102008b0151151560808601526102208b015160a0909501949094528451600380549183166001600160a01b031992831617815593860151600480549184169183169190911790559185015160058054919092169281168317825593850151929390916001600160a81b031990911617600160a01b83600181111561036f5761036f610fc9565b0217905550608082015160028201805460a08086015160ff16600160c01b0260ff60c01b1962ffffff909516600160a81b029490941663ffffffff60a81b199092169190911792909217905560c08084015160038401805460e08701511515600160a01b026001600160a81b03199091166001600160a01b03938416171790556101009094015160049093019290925588015190880151908216911610610240525050506102208301515f925082915061042890610b1e565b6016805461ffff909216600160e01b0261ffff60e01b1962ffffff909416600160c81b029390931664ffffffffff60c81b19909216919091179190911790555061103a92505050565b80516001600160a01b03163b1580610495575060208101516001600160a01b03163b155b806104ac575060408101516001600160a01b03163b155b806104c3575060608101516001600160a01b03163b155b806104da575060808101516001600160a01b03163b155b806104f1575060c08101516001600160a01b03163b155b80610507575060a08101516001600160a01b0316155b8061052b57508060c001516001600160a01b03168160a001516001600160a01b0316145b80610542575060a08101516001600160a01b031630145b80610566575080606001516001600160a01b031681602001516001600160a01b0316145b806105895750805f01516001600160a01b031681602001516001600160a01b0316145b806105a0575060208101516001600160a01b031630145b806105b7575060608101516001600160a01b031630145b806105ce575060808101516001600160a01b031630145b806105f15750805f01516001600160a01b031681608001516001600160a01b0316145b80610604575060e081015162ffffff1615155b8061061a5750600160020b81610100015160020b125b806106315750610100810151617fff60029190910b135b8061065757506401000276a36001600160a01b03168161012001516001600160a01b0316105b8061068d575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168161012001516001600160a01b031610155b806106a95750620f424062ffffff1681610140015162ffffff16115b806106c7575080610140015162ffffff1681610160015162ffffff16115b806106dd5750600160ff16816101a0015160ff16115b8061071457506101c081015160ff161580159061071457506004816101c0015160ff1610806107145750600a816101c0015160ff16115b8061073d57506101c081015160ff161580159061073d57506101e08101516001600160a01b0316155b8061075557506101e08101516001600160a01b031630145b806107795750805f01516001600160a01b0316816101e001516001600160a01b0316145b8061079e575080608001516001600160a01b0316816101e001516001600160a01b0316145b806107ac5750610240810151155b806107c0575061026081015163ffffffff16155b806107d65750602081610260015163ffffffff16115b156107f45760405163c52a9bd360e01b815260040160405180910390fd5b5f816020015190505f8260800151905082606001516001600160a01b0316826001600160a01b031663f2f4eb266040518163ffffffff1660e01b8152600401602060405180830381865afa15801561084e573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108729190610fdd565b6001600160a01b03161415806108fc5750825f01516001600160a01b0316826001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108f09190610fdd565b6001600160a01b031614155b8061097c575082604001516001600160a01b0316826001600160a01b031663c7f7fb906040518163ffffffff1660e01b8152600401602060405180830381865afa15801561094c573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109709190610fdd565b6001600160a01b031614155b806109fc575082608001516001600160a01b0316826001600160a01b031663d7b96d4e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109cc573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109f09190610fdd565b6001600160a01b031614155b80610a7c575082602001516001600160a01b0316816001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a4c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a709190610fdd565b6001600160a01b031614155b80610afb5750825f01516001600160a01b0316816001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610acb573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610aef9190610fdd565b6001600160a01b031614155b15610b195760405163c52a9bd360e01b815260040160405180910390fd5b505050565b5f5f60c0516001600160a01b031663deee4135846040518263ffffffff1660e01b8152600401610b5091815260200190565b6040805180830381865afa158015610b6a573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b8e9190610fff565b909250905062ffffff82161580610bac5750620d89e862ffffff8316115b80610bbb575060028161ffff16105b80610bcb575061100061ffff8216115b15610be95760405163c52a9bd360e01b815260040160405180910390fd5b915091565b60405161028081016001600160401b0381118282101715610c1d57634e487b7160e01b5f52604160045260245ffd5b60405290565b6001600160a01b0381168114610c37575f5ffd5b50565b8051610c4581610c23565b919050565b805162ffffff81168114610c45575f5ffd5b8051600281900b8114610c45575f5ffd5b805163ffffffff81168114610c45575f5ffd5b805160ff81168114610c45575f5ffd5b80518015158114610c45575f5ffd5b5f610280828403128015610cb1575f5ffd5b50610cba610bee565b610cc383610c3a565b8152610cd160208401610c3a565b6020820152610ce260408401610c3a565b6040820152610cf360608401610c3a565b6060820152610d0460808401610c3a565b6080820152610d1560a08401610c3a565b60a0820152610d2660c08401610c3a565b60c0820152610d3760e08401610c4a565b60e0820152610d496101008401610c5c565b610100820152610d5c6101208401610c3a565b610120820152610d6f6101408401610c4a565b610140820152610d826101608401610c4a565b610160820152610d956101808401610c6d565b610180820152610da86101a08401610c80565b6101a0820152610dbb6101c08401610c80565b6101c0820152610dce6101e08401610c3a565b6101e0820152610de16102008401610c90565b61020082015261022083810151908201526102408084015190820152610e0a6102608401610c6d565b6102608201529392505050565b6001600160a01b03169052565b5f61028082019050610e37828451610e17565b6020830151610e496020840182610e17565b506040830151610e5c6040840182610e17565b506060830151610e6f6060840182610e17565b506080830151610e826080840182610e17565b5060a0830151610e9560a0840182610e17565b5060c0830151610ea860c0840182610e17565b5060e0830151610ebf60e084018262ffffff169052565b50610100830151610ed661010084018260020b9052565b50610120830151610eeb610120840182610e17565b50610140830151610f0461014084018262ffffff169052565b50610160830151610f1d61016084018262ffffff169052565b50610180830151610f3761018084018263ffffffff169052565b506101a0830151610f4e6101a084018260ff169052565b506101c0830151610f656101c084018260ff169052565b506101e0830151610f7a6101e0840182610e17565b50610200830151610f9061020084018215159052565b50610220830151610220830152610240830151610240830152610260830151610fc261026084018263ffffffff169052565b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215610fed575f5ffd5b8151610ff881610c23565b9392505050565b5f5f60408385031215611010575f5ffd5b61101983610c4a565b9150602083015161ffff8116811461102f575f5ffd5b809150509250929050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161024051615fef61130b5f395f8181613dd401526142b901525f81816121ac015281816122b201526135e501525f818161216b0152818161227701526135c401525f8181610494015281816105b101526132c001525f818161056f015261372401525f81816104e0015261137f01525f61071001525f61040601525f818161036b0152818161098301528181610d8601528181611105015281816113ee0152818161160a0152818161170c01528181611a2a01528181611e6301528181611fa20152818161224c01528181612732015281816128b301528181612be701528181613242015281816132ef015281816134bd015281816136b1015281816136ec01526143e901525f818161089f01528181612da40152818161396601526144c901525f818161054801528181610d4e01528181610fde0152818161115301528181611fee01528181612059015281816120c30152818161222601528181612758015281816127fc0152818161289001526135a301525f818161084401528181612df3015281816139b5015261442101525f818161068301526111dd01525f81816102db0152818161090901528181610c820152818161134201528181612e3d0152818161379801526144a601525f818161074001528181610af801528181610b8e01528181610edf015281816110e4015281816112b101528181611478015281816115e90152818161167c0152818161191a01528181611b8101528181611da00152818161220501528181612a1b01528181612aaa01528181612b270152818161326901528181613327015281816134e2015281816135560152818161358201528181613c660152818161458501528181614764015281816147f301528181614870015281816149380152818161498301526149f00152615fef5ff3fe608060405234801561000f575f5ffd5b5060043610610244575f3560e01c80630268e293146102485780630581555f1461025d5780630885f7321461027757806321d0ee7014610297578063259982e5146102c35780632b20e397146102d65780633382743814610315578063359b4f301461031f5780633e451d6a1461034057806342ea83e01461035357806347f8496c1461036657806350fb3a3a1461038d5780635524d548146103a0578063575e24b4146103c35780635955d09a1461040157806360f89f2e14610428578063654f631c1461043b5780636fe7e6eb1461046c578063747a68cd1461047f5780637dbeb94e14610492578063847211a6146104c85780638bc801c1146104db57806391dd734614610502578063921b0bed146105225780639759164a146105435780639e5fe0621461056a578063a3f4bac7146105a6578063a8691114146105af578063aae49d70146105d8578063ac4e4054146105e2578063ac5555aa146105eb578063b47b2fb1146105fe578063b6a8b0fa14610634578063c5c51dca14610647578063c5fbb2981461065c578063c67046af1461066f578063c7f7fb901461067e578063ca266dfe146106a5578063ce1b8e4f1461070b578063d2be662514610732578063dc4c90d31461073b578063dd71cea814610762578063e1b4af69146107af578063e2e65ec1146107c2578063f11457c7146107d5578063f2f4eb261461083f578063f399150c14610866578063f9bc70e714610887578063fc0c546a1461089a578063fd5b6d5b146108c1575b5f5ffd5b61025b610256366004615362565b6108d4565b005b5f5b60405161ffff90911681526020015b60405180910390f35b61028a61028536600461537c565b6109d7565b60405161026e91906153dd565b6102aa6102a53660046154d8565b610aec565b6040516001600160e01b0319909116815260200161026e565b6102aa6102d13660046154d8565b610b82565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b03909116815260200161026e565b62010016546102fd565b61033261032d366004615558565b610c1f565b60405190815260200161026e565b61033261034e366004615586565b610c3c565b61025b6103613660046155a1565b610c4d565b6103327f000000000000000000000000000000000000000000000000000000000000000081565b61025b61039b3660046155ef565b610de1565b6103b36103ae36600461537c565b610ebc565b604051901515815260200161026e565b6103d66103d1366004615622565b610ed1565b604080516001600160e01b03199094168452602084019290925262ffffff169082015260600161026e565b6103327f000000000000000000000000000000000000000000000000000000000000000081565b61025b61043636600461567b565b6110d5565b61044e61044936600461537c565b6111bb565b6040805162ffffff909316835261ffff90911660208301520161026e565b6102aa61047a3660046156d3565b6112a5565b61033261048d366004615586565b611445565b7f00000000000000000000000000000000000000000000000000000000000000005b60405162ffffff909116815260200161026e565b6103326104d636600461537c565b611459565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b61051561051036600461572a565b61146b565b60405161026e9190615768565b61053561053036600461579d565b611590565b60405161026e929190615815565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6105917f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff909116815260200161026e565b6102fd613fff81565b7f000000000000000000000000000000000000000000000000000000000000000060181c610591565b6104b4620f424081565b6102fd611afc81565b6103b36105f936600461537c565b611655565b61061161060c3660046158a1565b61166f565b604080516001600160e01b03199093168352600f9190910b60208301520161026e565b6102aa610642366004615921565b61190e565b61064f6119c0565b60405161026e919061597a565b61033261066a36600461537c565b611a6b565b600160405161026e91906159bc565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6106b86106b336600461537c565b611a8d565b60405161026e919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b6103327f000000000000000000000000000000000000000000000000000000000000000081565b61025f61100081565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6107756107703660046159cf565b611b17565b6040805163ffffffff909516855260069390930b60208501526001600160a01b03909116918301919091521515606082015260800161026e565b6102aa6107bd366004615921565b611b75565b6103326107d0366004615558565b611c2f565b6107e86107e336600461537c565b611c4d565b6040805161ffff998a168152978916602089015295881695870195909552600293840b60608701526001600160401b039283166080870152911660a0850152900b60c083015290911660e08201526101000161026e565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b610879610874366004615362565b611cc2565b60405161026e9291906159ef565b6104b46108953660046159fd565b611ecc565b6102fd7f000000000000000000000000000000000000000000000000000000000000000081565b6103326108cf366004615558565b611f39565b3068929eee149b4bd2126854036108f25763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610946576040516282b42960e81b815260040160405180910390fd5b61094f81611f57565b60135415610970576040516304c7cf6760e51b815260040160405180910390fd5b4260135561097c611f96565b60405142907f0000000000000000000000000000000000000000000000000000000000000000907ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd905f90a33868929eee149b4bd212685550565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e08101829052610100810191909152610a2882611fa0565b6040805161012081018252600380546001600160a01b039081168352600454811660208401526005549081169383019390935290916060830190600160a01b900460ff166001811115610a7d57610a7d6153a0565b6001811115610a8e57610a8e6153a0565b8152600282015462ffffff600160a81b820416602083015260ff600160c01b9091048116604083015260038301546001600160a01b0381166060840152600160a01b9004161515608082015260049091015460a09091015292915050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b35576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610b535763ab143c065f526004601cfd5b610b5c85611f57565b610b668685611fdf565b610b6f84612134565b5063021d0ee760e41b5b95945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610bcb576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610be95763ab143c065f526004601cfd5b610bf285611f57565b610bfc8685611fdf565b610c0461213d565b610c0d84612134565b5063259982e560e01b95945050505050565b5f610c2983611fa0565b610c3282612168565b5490505b92915050565b5f610c4682612168565b5492915050565b3068929eee149b4bd212685403610c6b5763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cbf576040516282b42960e81b815260040160405180910390fd5b610ce0610cdb610cd436859003850185615a6b565b60a0902090565b611fa0565b60125460ff1615610d0457604051630ea075bf60e21b815260040160405180910390fd5b610d0d81612203565b610d168161250c565b610d236020820182615586565b600380546001600160a01b0319166001600160a01b039283161790556012805460ff191660011790557f000000000000000000000000000000000000000000000000000000000000000016610d7b6020830183615586565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec60405160405180910390a43868929eee149b4bd21268555050565b3068929eee149b4bd212685403610dff5763ab143c065f526004601cfd5b610e0882611fa0565b6016805461ffff600160e01b90910481169083161115610e32578054600160e01b900461ffff1691505b8054600160201b900461ffff165f610e4c6017838661251e565b835461ffff60201b1916600160201b61ffff838116918202929092178655919250831614610eb5576040805161ffff80851682528316602082015286917f04f592d3848fffa22f73de92a2fd8da837e6d597f468af77c6fc619b478362ae910160405180910390a25b5050505050565b5f610ec682611fa0565b505060125460ff1690565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f1c576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610f3a5763ab143c065f526004601cfd5b60155460ff1615610f5e5760405163558a1e0360e11b815260040160405180910390fd5b610f6787611f57565b610f6f61213d565b60035f610f7c8a896125b1565b90505f610f898a8a6125e9565b90505f62ffffff831615801590610fa75750610fa7828c8c87612627565b15610fc557610fc2610fbc8b602001356126ab565b846126e6565b90505b6040516364b3357d60e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c9666afa90611017908f908f908790600401615bcc565b602060405180830381865afa158015611032573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906110569190615bf7565b90506110928c61106960208e018e615c0e565b611073575f611075565b825b61108260208f018f615c0e565b61108c5783612724565b5f612724565b81156110b4576110b483838760020160189054906101000a900460ff16612911565b506315d7892d60e21b965060801b94505f9350505050955095509592505050565b6110de83611f57565b5f6111297f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612c56565b5050600354919250506001600160a01b03848116911614158061117e5750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8061119057506001600160a01b038116155b156111ad5760405162820f3560e61b815260040160405180910390fd5b6111b5612d08565b50505050565b60405163deee413560e01b8152600481018290525f9081906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063deee4135906024016040805180830381865afa158015611221573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112459190615c27565b909250905062ffffff821615806112635750620d89e862ffffff8316115b80611272575060028161ffff16105b80611282575061100061ffff8216115b156112a05760405163c52a9bd360e01b815260040160405180910390fd5b915091565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112ee576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd21268540361130c5763ab143c065f526004601cfd5b611321610cdb610cd436879003870187615a6b565b60125460ff16158061133a5750601254610100900460ff165b8061137757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b806113b457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156113d15760405162820f3560e61b815260040160405180910390fd5b6113da82612eed565b6012805461ff0019166101001790556040517f0000000000000000000000000000000000000000000000000000000000000000907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab2905f90a250636fe7e6eb60e01b5b949350505050565b5f61144f82612168565b6003015492915050565b5f61146382611fa0565b505060135490565b6060336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146114b5576040516282b42960e81b815260040160405180910390fd5b60145415806114dd575060145483836040516114d2929190615c54565b604051809103902014155b156114fb5760405163f7a632f560e01b815260040160405180910390fd5b5f601481905561150d83850185615a6b565b905061151d610cdb8260a0902090565b601254610100900460ff166115445760405162820f3560e61b815260040160405180910390fd5b5f611551825f0151612ef6565b90505f6115618360200151612ef6565b905081816040516020016115769291906159ef565b604051602081830303815290604052935050505092915050565b60608061159c85611fa0565b6016805462010000900461ffff165f036115c9576040516329d9e10560e01b815260040160405180910390fd5b805461164890429087908790600160301b810460020b9061ffff1661162e7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612f8f565b875460179695949392919062010000900461ffff16613012565b9250925050935093915050565b5f61165f82611fa0565b5050601254610100900460ff1690565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116b9576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036116d75763ab143c065f526004601cfd5b60155460ff16156116fb5760405163558a1e0360e11b815260040160405180910390fd5b61170487611f57565b5f61173260107f00000000000000000000000000000000000000000000000000000000000000008b8a61316d565b905061173f885f5f612724565b60035f61174c8a8a6125e9565b90505f61175c60208c018c615586565b6001600160a01b0316826001600160a01b0316146117865761178160208c018c615586565b611796565b61179660408c0160208d01615586565b905062ffffff8416158015906117b357506117b3828c8c86612627565b1561184c575f6117cf6117c98c602001356126ab565b866126e6565b9050801561184a575f6117e560208e018e615586565b6001600160a01b0316846001600160a01b03161461180c576118078b600f0b90565b611816565b6118168b60801d90565b90506118268260208e0135615c77565b81600f0b146118485760405163161b48a960e21b815260040160405180910390fd5b505b505b5f62ffffff8516158015906118685750611868828d8d87612627565b156118e9575f61187b60208e018e615586565b6001600160a01b0316836001600160a01b0316146118a25761189d8b600f0b90565b6118ac565b6118ac8b60801d90565b90506118c36118bd82600f0b6126ab565b876126e6565b915081156118e7576118e783838760020160189054906101000a900460ff16612911565b505b6118f48c8c8c6131db565b63b47b2fb160e01b9d909c509a5050505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611957576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036119755763ab143c065f526004601cfd5b60155460ff16156119995760405163558a1e0360e11b815260040160405180910390fd5b6119a286611f57565b6119ad868686612724565b50635b54587d60e11b9695505050505050565b60125460609060ff166119d3575f6119d6565b60015b60ff166001600160401b038111156119f0576119f0615a17565b604051908082528060200260200182016040528015611a19578160200160208202803683370190505b5060125490915060ff1615611a68577f0000000000000000000000000000000000000000000000000000000000000000815f81518110611a5b57611a5b615c9e565b6020026020010181815250505b90565b5f611a7582611fa0565b601654600160881b90046001600160401b0316610c36565b6040805160a0810182525f80825260208201819052918101829052606081018290526080810191909152611ac082611fa0565b50506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b5f5f5f5f611b2486611fa0565b5f60178661ffff8110611b3957611b39615c9e565b015463ffffffff811698600160201b820460060b9850600160581b82046001600160a01b03169750600160f81b90910460ff1695509350505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611bbe576040516282b42960e81b815260040160405180910390fd5b60155460ff1615611be25760405163558a1e0360e11b815260040160405180910390fd5b3068929eee149b4bd212685403611c005763ab143c065f526004601cfd5b611c0986611f57565b611c14865f5f612724565b611c1c6131eb565b5063e1b4af6960e01b9695505050505050565b5f611c3983611fa0565b611c4282612168565b600101549392505050565b5f5f5f5f5f5f5f5f611c5e89611fa0565b505060165461ffff8082169962010000830482169950600160201b830482169850600160301b8304600290810b98506001600160401b03600160481b850481169850600160881b8504169650600160c81b8404900b9450600160e01b909204169150565b5f5f3068929eee149b4bd212685403611ce25763ab143c065f526004601cfd5b3068929eee149b4bd212685560155460ff1615611d125760405163558a1e0360e11b815260040160405180910390fd5b611d1b83611f57565b6003546001600160a01b03163314611d45576040516282b42960e81b815260040160405180910390fd5b600854151580611d565750600c5415155b15611e57575f83604051602001611d6d9190615cb2565b60408051601f1981840301815290829052805160208201206014556348c8949160e01b825291505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906348c8949190611dd5908590600401615768565b5f604051808303815f875af1158015611df0573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611e179190810190615cc0565b60145490915015611e3b5760405163f7a632f560e01b815260040160405180910390fd5b80806020019051810190611e4f9190615d52565b909450925050505b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b68484604051611eb39291906159ef565b60405180910390a33868929eee149b4bd2126855915091565b5f3068929eee149b4bd212685403611eeb5763ab143c065f526004601cfd5b601254610100900460ff16611f125760405162820f3560e61b815260040160405180910390fd5b611f1a612d08565b5f611f24836131f3565b509050611f30816133d7565b9150505b919050565b5f611f4383611fa0565b611f4c82612168565b600201549392505050565b611f6c610cdb610cd436849003840184615a6b565b601254610100900460ff16611f935760405162820f3560e61b815260040160405180910390fd5b50565b611f9e613472565b565b7f00000000000000000000000000000000000000000000000000000000000000008114611f935760405162820f3560e61b815260040160405180910390fd5b60155460ff16801561203057507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b03161415806120305750604081013515155b1561204e5760405163558a1e0360e11b815260040160405180910390fd5b6013545f036120ad577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316146120a957604051637cd5a0ad60e01b815260040160405180910390fd5b5050565b600654600160a01b900460ff1680156120f857507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015612116575060155460ff1680612116575061211482613483565b155b156120a957604051630af9fb3360e21b815260040160405180910390fd5b611f9381613491565b601554610100900460ff161561214f57565b612157612d08565b6015805461ff001916610100179055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036121aa57506008919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036121eb5750600c919050565b60405162820f3560e61b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f612270837f0000000000000000000000000000000000000000000000000000000000000000612c56565b50505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b5f14806122d557506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b155b806122e857506001600160a01b03811615155b8061231457506001600160a01b0382166123086040860160208701615586565b6001600160a01b031614155b8061234257506005546001600160a01b03166123366060860160408701615586565b6001600160a01b031614155b8061238a5750600554600160a01b900460ff166001811115612366576123666153a0565b6123766080860160608701615d74565b6001811115612387576123876153a0565b14155b806123b75750600554600160a81b900462ffffff166123af60a0860160808701615d92565b62ffffff1614155b806123e05750600554600160c01b900460ff166123da60c0860160a08701615dad565b60ff1614155b8061240e57506006546001600160a01b031661240260e0860160c08701615586565b6001600160a01b031614155b806124395750600654600160a01b900460ff161515612434610100860160e08701615c0e565b151514155b8061244b575060075461010085013514155b8061246a575061245e6020850185615586565b6001600160a01b03163b155b8061249257506001600160a01b0382166124876020860186615586565b6001600160a01b0316145b806124b15750306124a66020860186615586565b6001600160a01b0316145b806124d957506001600160a01b0383166124ce6020860186615586565b6001600160a01b0316145b156124f75760405163c52a9bd360e01b815260040160405180910390fd5b6111b56125076020860186615586565b613580565b61251581613a3f565b611f9381613aa1565b5f8261ffff165f03612543576040516329d9e10560e01b815260040160405180910390fd5b8261ffff168261ffff16116125595750816125aa565b825b8261ffff168161ffff1610156125a5576001858261ffff1661ffff811061258457612584615c9e565b01805463ffffffff191663ffffffff9290921691909117905560010161255b565b508190505b9392505050565b5f5f5f6125bd846131f3565b604082015191935091506125d46010848888613b3c565b93506125e08282613bba565b50505092915050565b5f6125f76020830183615c0e565b15155f6020840135121461261a576126156040840160208501615586565b6125aa565b6125aa6020840184615586565b5f8060016002840154600160a01b900460ff16600181111561264b5761264b6153a0565b146126835761265d6020850185615c0e565b612676576126716040860160208701615586565b612692565b6126716020860186615586565b60028301546001600160a01b03165b6001600160a01b03878116911614915050949350505050565b5f600160ff1b82036126d057604051637e2df70960e11b815260040160405180910390fd5b5f82126126dd5781610c36565b610c3682615dcd565b5f6126fa838362ffffff16620f4240613bc4565b905060016001607f1b03811115610c3657604051637e2df70960e11b815260040160405180910390fd5b60405162e568cf60e71b81527f000000000000000000000000000000000000000000000000000000000000000060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906372b4678090602401602060405180830381865afa1580156127a5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c99190615bf7565b5f036127d457505050565b6015805460ff191660011790556040516381f8a9d160e01b81525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906381f8a9d19061283590889088908890600401615de7565b60408051808303815f875af1158015612850573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906128749190615d52565b6015805460ff1916905560405191935091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000907fa30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e9061290290869086906159ef565b60405180910390a35050505050565b3068929eee149b4bd21268540361292f5763ab143c065f526004601cfd5b3068929eee149b4bd2126855825f61294682612168565b90505f8160020154825f015461295c9190615e06565b905061296f8160016001607f1b03615e06565b85111561298157612981868383613c52565b5f60ff8516156129b457606461299a60ff871688615e2d565b6129a590607d615e40565b6129af9190615e2d565b6129b6565b5f5b905085835f015f8282546129ca9190615e57565b9250508190555080836001015f8282546129e49190615e57565b9250508190555085836003015f8282546129fe9190615e57565b9091555050604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90612a519030908990600401615e6a565b602060405180830381865afa158015612a6c573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612a909190615bf7565b604051630ab714fb60e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063156e29f690612ae390309089908c90600401615e84565b5f604051808303815f87803b158015612afa575f5ffd5b505af1158015612b0c573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e90612b5e9030908a90600401615e6a565b602060405180830381865afa158015612b79573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612b9d9190615bf7565b905081811080612baf57508782820314155b80612bbd5750846003015481105b15612bdb5760405163104eed1d60e31b815260040160405180910390fd5b856001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af68a86604051612c379291906159ef565b60405180910390a35050505050503868929eee149b4bd2126855505050565b5f5f5f5f5f612c6486613cf6565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa158015612cac573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612cd09190615bf7565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b601554610100900460ff1615612d1a57565b6003546001600160a01b03165f612d40612d3b83630d96a1bf60e21b613d32565b613d4c565b90505f612d628263537df88f60e11b6001600160a01b038616602460c0613d5e565b9050606081015160a01c815160a01c1715612d7b575f5ffd5b60a081015160808201511760101c15612d92575f5ffd5b60c081016040525f6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612dd8612d3b8563514526c360e11b613d32565b6001600160a01b0316141580612e3357506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016612e27612d3b8563056a0fbf60e31b613d32565b6001600160a01b031614155b80612e68575081517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b80612e7c57505f612e7a836020015190565b145b80612e9057505f612e8e836040015190565b145b80612ea457505f612ea2836060015190565b145b80612ebd57508061ffff16612eba8360a0015190565b14155b80612ecf5750608082015160a0830151115b156111b55760405163c52a9bd360e01b815260040160405180910390fd5b611f9381613d93565b5f8181612f0282612168565b80549091505f819003612f1957505f949350505050565b612f338583846002015484612f2e9190615e06565b613c52565b6001820180545f808555918290556002840191909155612f538183615e06565b600654909550612f6e9085906001600160a01b031683613ea1565b600354612f869085906001600160a01b031687613ea1565b50505050919050565b5f5f612f9a83613cf6565b90505f612fa8600383615e57565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa158015612fee573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610b799190615bf7565b6060808261ffff165f03613039576040516329d9e10560e01b815260040160405180910390fd5b866001600160401b0381111561305157613051615a17565b60405190808252806020026020018201604052801561307a578160200160208202803683370190505b509150866001600160401b0381111561309557613095615a17565b6040519080825280602002602001820160405280156130be578160200160208202803683370190505b5090505f5b8781101561315f576131008b8b8b8b858181106130e2576130e2615c9e565b90506020020160208101906130f79190615ea8565b8a8a8a8a613f31565b84838151811061311257613112615c9e565b6020026020010184848151811061312b5761312b615c9e565b60200260200101826001600160a01b03166001600160a01b03168152508260060b60060b81525050508060010190506130c3565b509850989650505050505050565b60018401545f9063ffffffff16801580613192575061318d8585856140dd565b865414155b156131b3576040516001620787ab60e51b0319815260040160405180910390fd5b6131be600182615ecb565b5f87556001909601805463ffffffff191690555093949350505050565b6131e6838383614112565b505050565b611f9e614131565b61323f60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b5f7f000000000000000000000000000000000000000000000000000000000000000081808061328e7f000000000000000000000000000000000000000000000000000000000000000085612c56565b509250925092508062ffffff165f146132ba5760405163c52a9bd360e01b815260040160405180910390fd5b8194505f7f000000000000000000000000000000000000000000000000000000000000000090506040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000008152602001856001600160a01b0316815260200161334c7f000000000000000000000000000000000000000000000000000000000000000088612f8f565b6001600160801b0316815260200189602001358152602001895f0160208101906133769190615c0e565b1515815260055462ffffff600160a81b8204811660208401528416604083015263ffffffff601885901c16606083015260809091019060ff600160a01b9091041660018111156133c8576133c86153a0565b81525096505050505050915091565b5f600160ff1b82606001510361340057604051637e2df70960e11b815260040160405180910390fd5b60a082015160c083015161341384614142565b92508162ffffff168362ffffff16111561344057604051637e2df70960e11b815260040160405180910390fd5b8062ffffff168362ffffff16101561346b576040516302cce67760e31b815260040160405180910390fd5b5050919050565b611f9e632520a12d60e11b5f6141a3565b5f610c368262010016541490565b604081013515806134b35750601654600160481b90046001600160401b031643145b156134bb5750565b7f00000000000000000000000000000000000000000000000000000000000000005f6135077f000000000000000000000000000000000000000000000000000000000000000083612c56565b5090925061351b9150506020840184615ee7565b60020b8160020b128061354357506135396040840160208501615ee7565b60020b8160020b12155b1561354d57505050565b6131e68161357b7f000000000000000000000000000000000000000000000000000000000000000085612f8f565b614243565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f613619612d3b87630d96a1bf60e21b613d32565b90505f613627878585614322565b90506001600160a01b038616613647612d3b8963dc4c90d360e01b613d32565b6001600160a01b031614158061368257506001600160a01b038516613676612d3b89636bdcb6a760e11b613d32565b6001600160a01b031614155b806136a957503061369d612d3b89636620eee760e11b613d32565b6001600160a01b031614155b806136e457507f00000000000000000000000000000000000000000000000000000000000000006136e188631f06e1a760e11b613d32565b14155b8061371757507f0000000000000000000000000000000000000000000000000000000000000000613714886143bd565b14155b80613758575063ffffffff7f00000000000000000000000000000000000000000000000000000000000000001661375588634f2ff03160e11b613d32565b14155b8061378857506001600160a01b03861661377c612d3b8763dc4c90d360e01b613d32565b6001600160a01b031614155b806137d857506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166137cc612d3b87630b775e8f60e11b613d32565b6001600160a01b031614155b806137f257505f6137ef8662e568cf60e71b6143e0565b14155b80613811575061381161380c86630323715f60e11b6143e0565b614411565b8061382c57505f61382986635c0af38360e01b6143e0565b14155b8061385357505f613847612d3b87630961712f60e01b6143e0565b6001600160a01b031614155b8061385c575080155b8061386f57506001600160a01b0382163b155b8061388257506001600160a01b03821630145b8061389e5750866001600160a01b0316826001600160a01b0316145b806138ba5750846001600160a01b0316826001600160a01b0316145b806138d65750856001600160a01b0316826001600160a01b0316145b806138f25750836001600160a01b0316826001600160a01b0316145b8061390e5750826001600160a01b0316826001600160a01b0316145b8061392657506006546001600160a01b038381169116145b8061393e57506006546001600160a01b038881169116145b1561395c5760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661399a612d3b8463514526c360e11b613d32565b6001600160a01b03161415806139f557506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166139e9612d3b8463056a0fbf60e31b613d32565b6001600160a01b031614155b80613a0f5750613a0f61380c8363b3f05b9760e01b613d32565b15613a2d5760405163c52a9bd360e01b815260040160405180910390fd5b613a368261441f565b50505050505050565b5f5f613a4f8361010001356111bb565b6016549193509150600283810b600160c81b909204900b141580613a83575060165461ffff828116600160e01b9092041614155b156131e65760405163c52a9bd360e01b815260040160405180910390fd5b5f613aaf6020830183615586565b90506306704e8760e31b637f5a7c7b60e01b5f80613af8565b5f604051838152602081600483865afa601f3d118116613ae6575f5ffd5b5051905060a081901c15610c36575f5ffd5b613b028486613ac8565b915030613b0f8484613ac8565b14905080613b305760405163c52a9bd360e01b815260040160405180910390fd5b50620100165550505050565b60018401545f9063ffffffff1615613b6a576040516001620787ab60e51b0319815260040160405180910390fd5b8351613b75856133d7565b9150613b828185856140dd565b8655613b9462ffffff83166001615f00565b600196909601805463ffffffff191663ffffffff90971696909617909555949350505050565b6120a982826146ff565b82820281838583041485151702613c4b575f198385098181108201900382848609835f038416828511613bfe5763ae47f7025f526004601cfd5b93849004938382119092035f8390038390046001010292030417600260038302811880840282030280840282030280840282030280840282030280840282030280840290910302026125aa565b0492915050565b805f03613c5e57505050565b8281613c8a827f0000000000000000000000000000000000000000000000000000000000000000614722565b1015613ca9576040516365169c1d60e01b815260040160405180910390fd5b81836003015f828254613cbc9190615e06565b90915550613ccd905081848461474c565b613cd8843084614924565b81836002015f828254613ceb9190615e57565b909155505050505050565b6040515f90613d15908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f80613d4384848360046020613d5e565b51949350505050565b5f8160a01c15613d5a575f5ffd5b5090565b6040518481526023198301613d74578360048201525b81818483895afa613d87573d5f823e3d81fd5b813d1015610b79575f5ffd5b6016613da0601742614a72565b825465ffffffff00001916600160201b61ffff9283160263ffff0000191617620100009290911691909102178155613df8827f0000000000000000000000000000000000000000000000000000000000000000614ab2565b8154600160301b600160881b031916600160301b62ffffff9290921691909102600160481b600160881b03191617600160481b436001600160401b039081169190910291909117600160881b600160c81b031916600160881b42929092169190910217808255600290600160e01b900461ffff16811115613e8257508054600160e01b900461ffff165b815461ffff8216600160201b0261ffff60201b19909116178255505050565b805f03613ead57505050565b5f613eb88430614722565b90505f613ec58585614722565b9050613ed2858585614ac7565b5f613edd8630614722565b90505f613eea8787614722565b905083821180613efc57508482850314155b80613f0657508281105b80613f1357508483820314155b15613a3657604051631dc418c360e31b815260040160405180910390fd5b5f5f8663ffffffff165f03613fd7575f898661ffff1661ffff8110613f5857613f58615c9e565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff16151560608301529092508a1614613fc357613fc0818a8988614b11565b90505b8060200151816040015192509250506140d1565b8688035f80613feb8c8c858c8c8c8c614bb7565b91509150815f015163ffffffff168363ffffffff160361401b5781602001518260400151945094505050506140d1565b805f015163ffffffff168363ffffffff16036140475780602001518160400151945094505050506140d1565b5f825f0151825f01510390505f835f0151850390508063ffffffff168263ffffffff1660060b856020015185602001510360060b8161408857614088615e19565b05028460200151018263ffffffff168263ffffffff1686604001518660400151036001600160a01b031602816140c0576140c0615e19565b048560400151019650965050505050505b97509795505050505050565b5f8383836040516020016140f393929190615f1c565b6040516020818303038152906040528051906020012090509392505050565b608081811c15159082901b1515166111b5632f02d37f60e21b826141a3565b611f9e6309f17b8160e31b5f6141a3565b60c081015160a082015160e08301515f92919062ffffff808316908416148061416f575063ffffffff8116155b1561417d5750909392505050565b5f5f614187614d92565b915091506141988585858585614e02565b979650505050505050565b62010016546001600160a01b0381166141bb57505050565b5f612710603f6141cf622dc6c06040615e40565b6141d99190615e2d565b6141e39190615e57565b905063c52a9bd360e01b7f6e819d90474482ea53f17905af71585dac910232de1a68f42349cd60badb2874825a101561421e57815f5260045ffd5b855f52846004525f5f60245f5f88622dc6c0f161423b578060205fa15b505050505050565b6016805461427a9060179061ffff808216914291600160301b820460020b918891620100008204811691600160201b900416614eb1565b825463ffffffff19166201000061ffff9283160261ffff1916179116178082556142dd90600160301b8104600290810b918691600160c81b909104900b7f000000000000000000000000000000000000000000000000000000000000000061502d565b8154600160301b600160881b031916600160301b62ffffff9290921691909102600160481b600160881b03191617600160481b436001600160401b0316021790555050565b5f8061433a856371a9730560e01b8360046020613d5e565b80519091506001600160a01b0380861691908516903d906001600160401b038111601f1983018211171561436c575f5ffd5b602081863e8451602080838503030481116001600160401b0382111715614391575f5ffd5b600281036143b057604060208301873e83602087015114858751141696505b5050505050509392505050565b5f806143d58363182148ef60e01b83600460a0613d5e565b60a090209392505050565b5f5f613d4384847f000000000000000000000000000000000000000000000000000000000000000060246020613d5e565b5f6001821115613d5a575f5ffd5b7f00000000000000000000000000000000000000000000000000000000000000005f6144588263086fce0d60e11b836004610160613d5e565b90505f6005905080604083015111602083015160201c1715614478575f5ffd5b6101408201606083015b818110156144a057805160a01c15614498575f5ffd5b602001614482565b505081517f000000000000000000000000000000000000000000000000000000000000000091507f0000000000000000000000000000000000000000000000000000000000000000908015806144fb57506001604085015114155b8061451957506001600160a01b038316614516856060015190565b14155b8061453757506001600160a01b038316614534856080015190565b14155b8061455557506001600160a01b0382166145528560a0015190565b14155b8061457557506005546001600160a01b03166145728560c0015190565b14155b806145b357506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166145b08560e0015190565b14155b156145d0576040516282b42960e81b815260040160405180910390fd5b5f6145dc856020015190565b90506145f586636373dff160e11b8460246101c0613d5e565b94505f600190505f600590508060a0880151118260808901511117604088015160a01c1715614622575f5ffd5b610120870160c088015b8181101561464a57805160a01c15614642575f5ffd5b60200161462c565b50506101a0870161012088015b8181101561467557805160201c1561466d575f5ffd5b602001614657565b5050865184925090501415806146905750600160a086015114155b806146ae57506001600160a01b0383166146ab8660c0015190565b14155b806146cc57506001600160a01b0387166146c98660e0015190565b14155b806146e2575061014085015163ffffffff821610155b15613a36576040516282b42960e81b815260040160405180910390fd5b601654600160481b90046001600160401b031643146120a9576120a98282614243565b5f816014526370a0823160601b5f5260208060246010865afa601f3d111660205102905092915050565b604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e9061479a9030908890600401615e6a565b602060405180830381865afa1580156147b5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906147d99190615bf7565b604051637a94c56560e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5298aca9061482c90309088908790600401615e84565b5f604051808303815f87803b158015614843575f5ffd5b505af1158015614855573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e906148a79030908990600401615e6a565b602060405180830381865afa1580156148c2573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906148e69190615bf7565b9050818111806148f857508281830314155b806149065750836003015481105b15610eb55760405163104eed1d60e31b815260040160405180910390fd5b805f0361493057505050565b825f61495c827f0000000000000000000000000000000000000000000000000000000000000000614722565b90505f6149698386614722565b604051630b0d9c0960e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c09906149bc90899089908990600401615e84565b5f604051808303815f87803b1580156149d3575f5ffd5b505af11580156149e5573d5f5f3e3d5ffd5b505050505f614a14847f0000000000000000000000000000000000000000000000000000000000000000614722565b90505f614a218588614722565b905083821180614a3357508582850314155b80614a3d57508281105b80614a4a57508583820314155b15614a6857604051631dc418c360e31b815260040160405180910390fd5b5050505050505050565b6040805160808101825263ffffffff83168082525f602083018190529282019290925260016060909101819052600160f81b9091178355805b9250929050565b5f81614abe57826125aa565b6125aa83615f3f565b816014528060345263a9059cbb60601b5f5260205f604460105f875af18060015f511416614b0757803d853b151710614b07576390b8ec185f526004601cfd5b505f603452505050565b614b19615326565b5f855f01518503905060405180608001604052808663ffffffff1681526020018263ffffffff168660020b0288602001510160060b81526020015f856001600160801b031611614b6a576001614b6c565b845b6001600160801b031663ffffffff60801b608085901b1681614b9057614b90615e19565b048860400151016001600160a01b0316815260200160011515815250915050949350505050565b614bbf615326565b614bc7615326565b888561ffff1661ffff8110614bde57614bde615c9e565b60408051608081018252919092015463ffffffff8116808352600160201b820460060b6020840152600160581b82046001600160a01b031693830193909352600160f81b900460ff16151560608201529250614c3c9089908961508b565b15614c75578663ffffffff16825f015163ffffffff1614614c695781614c6483898988614b11565b614c6c565b81815b915091506140d1565b8883614c82876001615f5f565b614c8c9190615f79565b61ffff1661ffff8110614ca157614ca1615c9e565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b90910416151560608201819052909250614d4a57604080516080810182528a5463ffffffff81168252600160201b810460060b6020830152600160581b81046001600160a01b031692820192909252600160f81b90910460ff161515606082015291505b614d5888835f01518961508b565b614d7557604051636ffbbccd60e11b815260040160405180910390fd5b614d828989898887615149565b9150915097509795505050505050565b5f5f60165461ffff8160101c166001811115614dfc5761ffff82168060170154826001840383010660170154915063ffffffff828203168015614df8578260201c8260201c0360060b8181059050808660301c60020b0397505063ffffffff8342031695505b5050505b50509091565b5f8462ffffff168662ffffff1610614e1b575083610b79565b5f83131580614e2e575063ffffffff8216155b80614e3d575063ffffffff8416155b15614e49575084610b79565b63ffffffff82811687870362ffffff160290849086168281614e6d57614e6d615e19565b04811115614e7f578692505050610b79565b8363ffffffff168663ffffffff16820281614e9c57614e9c615e19565b048862ffffff16019250505095945050505050565b5f5f5f898961ffff1661ffff8110614ecb57614ecb615c9e565b60408051608081018252919092015463ffffffff808216808452600160201b830460060b6020850152600160581b83046001600160a01b031694840194909452600160f81b90910460ff161515606083015290925089169003614f3457888592509250506140d1565b8461ffff168461ffff16118015614f5c5750614f51600186615f9c565b61ffff168961ffff16145b614f665784614f68565b835b915081614f768a6001615f5f565b614f809190615f79565b9250614f8e81898989614b11565b8a8461ffff1661ffff8110614fa557614fa5615c9e565b825191018054602084015160408501516060909501511515600160f81b026001600160f81b036001600160a01b03909616600160581b02959095166001600160581b0366ffffffffffffff909216600160201b026001600160581b031990931663ffffffff909516949094179190911716919091179190911790555097509795505050505050565b5f5f8560020b61503d8685614ab2565b60020b61504a9190615fb6565b9050600284900b808213156150615780915061507d565b61506a81615dcd565b82121561507d5761507a81615dcd565b91505b61419882600289900b615c77565b5f8363ffffffff168363ffffffff16111580156150b457508363ffffffff168263ffffffff1611155b156150d0578163ffffffff168363ffffffff16111590506125aa565b5f8463ffffffff168463ffffffff16116150fd576150f863ffffffff8516600160201b615e57565b615105565b8363ffffffff165b90505f8563ffffffff168463ffffffff16116151345761512f63ffffffff8516600160201b615e57565b61513c565b8363ffffffff165b9091111595945050505050565b615151615326565b615159615326565b5f83615166866001615f5f565b6151709190615f79565b61ffff1690505f60018561ffff16836151899190615e57565b6151939190615e06565b90505b5f60026151a38385615e57565b6151ad9190615e2d565b9050896151be61ffff881683615fdc565b61ffff81106151cf576151cf615c9e565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b9091041615156060820181905290955061523b57615233816001615e57565b925050615196565b8961ffff871661524c836001615e57565b6152569190615fdc565b61ffff811061526757615267615c9e565b60408051608081018252929091015463ffffffff81168352600160201b810460060b60208401526001600160a01b03600160581b8204169183019190915260ff600160f81b909104161515606082015285519094505f906152ca908b908b61508b565b90508080156152e257506152e28a8a875f015161508b565b156152ee57505061531a565b80615305576152fe600183615e06565b9250615313565b615310826001615e57565b93505b5050615196565b50509550959350505050565b604080516080810182525f80825260208201819052918101829052606081019190915290565b5f60a0828403121561535c575f5ffd5b50919050565b5f60a08284031215615372575f5ffd5b6125aa838361534c565b5f6020828403121561538c575f5ffd5b5035919050565b6001600160a01b03169052565b634e487b7160e01b5f52602160045260245ffd5b60028110611f9357634e487b7160e01b5f52602160045260245ffd5b6153d9816153b4565b9052565b81516001600160a01b0390811682526020808401519091169082015260408083015161012083019161541190840182615393565b50606083015161542460608401826153d0565b50608083015161543b608084018262ffffff169052565b5060a083015161545060a084018260ff169052565b5060c083015161546360c0840182615393565b5060e083015161547760e084018215159052565b5061010092830151919092015290565b6001600160a01b0381168114611f93575f5ffd5b5f5f83601f8401126154ab575f5ffd5b5081356001600160401b038111156154c1575f5ffd5b602083019150836020828501011115614aab575f5ffd5b5f5f5f5f5f8587036101608112156154ee575f5ffd5b86356154f981615487565b9550615508886020890161534c565b9450608060bf198201121561551b575f5ffd5b5060c0860192506101408601356001600160401b0381111561553b575f5ffd5b6155478882890161549b565b969995985093965092949392505050565b5f5f60408385031215615569575f5ffd5b82359150602083013561557b81615487565b809150509250929050565b5f60208284031215615596575f5ffd5b81356125aa81615487565b5f5f8284036101c08112156155b4575f5ffd5b6155be858561534c565b9250610120609f19820112156155d2575f5ffd5b5060a0830190509250929050565b61ffff81168114611f93575f5ffd5b5f5f60408385031215615600575f5ffd5b82359150602083013561557b816155e0565b5f6060828403121561535c575f5ffd5b5f5f5f5f5f6101408688031215615637575f5ffd5b853561564281615487565b9450615651876020880161534c565b93506156608760c08801615612565b92506101208601356001600160401b0381111561553b575f5ffd5b5f5f5f60e0848603121561568d575f5ffd5b615697858561534c565b925060a08401356156a781615487565b915060c08401356156b781615487565b809150509250925092565b8035600281900b8114611f34575f5ffd5b5f5f5f5f61010085870312156156e7575f5ffd5b84356156f281615487565b9350615701866020870161534c565b925060c085013561571181615487565b915061571f60e086016156c2565b905092959194509250565b5f5f6020838503121561573b575f5ffd5b82356001600160401b03811115615750575f5ffd5b61575c8582860161549b565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f604084860312156157af575f5ffd5b8335925060208401356001600160401b038111156157cb575f5ffd5b8401601f810186136157db575f5ffd5b80356001600160401b038111156157f0575f5ffd5b8660208260051b8401011115615804575f5ffd5b939660209190910195509293505050565b604080825283519082018190525f9060208501906060840190835b8181101561585157835160060b835260209384019390920191600101615830565b5050838103602080860191909152855180835291810192508501905f5b818110156158955782516001600160a01b031684526020938401939092019160010161586e565b50919695505050505050565b5f5f5f5f5f5f61016087890312156158b7575f5ffd5b86356158c281615487565b95506158d1886020890161534c565b94506158e08860c08901615612565b935061012087013592506101408701356001600160401b03811115615903575f5ffd5b61590f89828a0161549b565b979a9699509497509295939492505050565b5f5f5f5f5f5f6101208789031215615937575f5ffd5b863561594281615487565b9550615951886020890161534c565b945060c0870135935060e087013592506101008701356001600160401b03811115615903575f5ffd5b602080825282518282018190525f918401906040840190835b818110156159b1578351835260209384019390920191600101615993565b509095945050505050565b602081016159c9836153b4565b91905290565b5f5f604083850312156159e0575f5ffd5b50508035926020909101359150565b918252602082015260400190565b5f60608284031215615a0d575f5ffd5b6125aa8383615612565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715615a5357615a53615a17565b604052919050565b62ffffff81168114611f93575f5ffd5b5f60a0828403128015615a7c575f5ffd5b5060405160a081016001600160401b0381118282101715615a9f57615a9f615a17565b6040528235615aad81615487565b81526020830135615abd81615487565b60208201526040830135615ad081615a5b565b6040820152615ae1606084016156c2565b60608201526080830135615af481615487565b60808201529392505050565b8035615b0b81615487565b6001600160a01b031682526020810135615b2481615487565b6001600160a01b031660208301526040810135615b4081615a5b565b62ffffff166040830152615b56606082016156c2565b60020b60608301526080810135615b6c81615487565b6001600160a01b03166080929092019190915250565b80358015158114611f34575f5ffd5b615b9a81615b82565b15158252602081810135908301526040810135615bb681615487565b6001600160a01b03166040929092019190915250565b6101208101615bdb8286615b00565b615be860a0830185615b91565b82610100830152949350505050565b5f60208284031215615c07575f5ffd5b5051919050565b5f60208284031215615c1e575f5ffd5b6125aa82615b82565b5f5f60408385031215615c38575f5ffd5b8251615c4381615a5b565b602084015190925061557b816155e0565b818382375f9101908152919050565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f831280158216821582161715615c9657615c96615c63565b505092915050565b634e487b7160e01b5f52603260045260245ffd5b60a08101610c368284615b00565b5f60208284031215615cd0575f5ffd5b81516001600160401b03811115615ce5575f5ffd5b8201601f81018413615cf5575f5ffd5b80516001600160401b03811115615d0e57615d0e615a17565b615d21601f8201601f1916602001615a2b565b818152856020838501011115615d35575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f60408385031215615d63575f5ffd5b505080516020909101519092909150565b5f60208284031215615d84575f5ffd5b8135600281106125aa575f5ffd5b5f60208284031215615da2575f5ffd5b81356125aa81615a5b565b5f60208284031215615dbd575f5ffd5b813560ff811681146125aa575f5ffd5b5f600160ff1b8201615de157615de1615c63565b505f0390565b60e08101615df58286615b00565b60a082019390935260c00152919050565b81810381811115610c3657610c36615c63565b634e487b7160e01b5f52601260045260245ffd5b5f82615e3b57615e3b615e19565b500490565b8082028115828204841417610c3657610c36615c63565b80820180821115610c3657610c36615c63565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b5f60208284031215615eb8575f5ffd5b813563ffffffff811681146125aa575f5ffd5b63ffffffff8281168282160390811115610c3657610c36615c63565b5f60208284031215615ef7575f5ffd5b6125aa826156c2565b63ffffffff8181168382160190811115610c3657610c36615c63565b8381526001600160a01b038316602082015260a0810161143d6040830184615b91565b5f8160020b627fffff198103615f5757615f57615c63565b5f0392915050565b61ffff8181168382160190811115610c3657610c36615c63565b5f61ffff831680615f8c57615f8c615e19565b8061ffff84160691505092915050565b61ffff8281168282160390811115610c3657610c36615c63565b8181035f831280158383131683831282161715615fd557615fd5615c63565b5092915050565b5f82615fea57615fea615e19565b50069056";
@@ -1,71 +0,0 @@
1
- import type { Hex } from "viem";
2
- import type { LaunchEnvelopeV2, AdapterRegistrationV1, ProfileRegistrationV1 } from "../schema.js";
3
-
4
- // Black Market main 1ca9881: pool-hook-template-v1/20261011T214314Z-hmm-fixed.
5
- // Generated by scripts/generate-hmm-presets.mjs from admission bytes and hash-checked live storage children.
6
- export const hmmFixedEnvelope = Object.freeze({
7
- artifactDigest: "0x699b5108d783395b1a88a6c92cc135ce80a45d190266922942d05ddf388ae1ac",
8
- reviewManifestDigest: "0x77b7f0d34c662e1c1f25d6b2161a6bba37fcb61edefd13d0ee0bc84a7372bf97",
9
- configBoundsDigest: "0x72e0b2d542556d472a47f9c38b2c91079c72793af847dee77933f0eca203129d",
10
- termsDigest: "0x27373dbb7f9ebdfafb4cfbf6257131eda0b23fe47fd6e95a020e6729976e2e03",
11
- topology: 2,
12
- configVersion: 6,
13
- economicVersion: 3,
14
- capabilities: 123n,
15
- flags: 0n,
16
- callbackFlags: 6908,
17
- callbackMask: 16383,
18
- protocolTreasury: "0x961981916AB6575C3af3eeCecbf6A3b7Fad7C9e1",
19
- protocolFeeDenominator: 6,
20
- beneficiary: "0x7cb44b8693b3C350A2BcD4b681aF85365aa27783",
21
- maximumDeveloperFeeBps: 0,
22
- bounds: Object.freeze({
23
- minimumTickSpacing: 1,
24
- maximumTickSpacing: 32767,
25
- maximumPositions: 32,
26
- maximumOracleCardinality: 4096,
27
- feeModeFlags: 3,
28
- }),
29
- graph: Object.freeze({
30
- manager: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
31
- hookRoot: "0x0000000000000000000000000000000000000000",
32
- oracleFactory: "0xe7feF2BC860B25bbdEB6F6AB96d88bAAa77ddad7",
33
- locker: "0x30ba05aB5E0A12569Bd6D2A481F3efd1aE6544FA",
34
- collectorFactory: "0x3802dd3035C592FE0a13b00eB93aa225f323345A",
35
- collectorDeployer: "0x29DB95f6ddd29D0CFf6481fb2eFd96C26Cbe8e51",
36
- hookDeployer: "0xad3bBE3d921C5B9A5310550EAc2f24938C53a9c7",
37
- coreCodeHash: "0x9fb8f46c3b980b9db25dfdb487a69a308a86be145860269b4036a4e74480787b",
38
- managerCodeHash: "0xbd3881180b547f5fe817545743cfb4343e96b1bc6640dcd70c106b0066e95626",
39
- hookRuntimeCodeHash: "0x0000000000000000000000000000000000000000000000000000000000000000",
40
- oracleFactoryCodeHash: "0x974fb5c72d91ccb99f1eb4679a5d4432c82bbaa0906b1c2917ec4da3499b7b98",
41
- lockerCodeHash: "0xf8f7ad4ca06f9a2c7e9296ea9c68b00297f16a9a8309aa3f74d63ff66fb6aac5",
42
- collectorFactoryCodeHash: "0x81694220f02ab66fb12815eee2ccf4d75dad10968d79a29cfc6c8e21cf74ed6b",
43
- collectorDeployerCodeHash: "0xa7728eb517ca3826a4f939fb61c7739fe22ab66d86aa61d6224362242764e204",
44
- hookDeployerCodeHash: "0x8534539c433244bd9015a53b34eee99b2df2b13123408e2a26bd63e7f54b6a1e",
45
- hookCreationCodeHash: "0x699b5108d783395b1a88a6c92cc135ce80a45d190266922942d05ddf388ae1ac",
46
- codeChunk0: "0xC187971CC76C2378078D7D3BD97D2f429D6cd52b",
47
- codeChunk0Hash: "0xa69d8927c316f7d0bb54055bb79572bbd1902de61be8f76be12252113090cbca",
48
- codeChunk1: "0x0000000000000000000000000000000000000000",
49
- codeChunk1Hash: "0x0000000000000000000000000000000000000000000000000000000000000000",
50
- sharedHookSalt: "0x0000000000000000000000000000000000000000000000000000000000000000",
51
- }),
52
- }) satisfies LaunchEnvelopeV2;
53
- export const hmmFixedAdapter = Object.freeze({
54
- implementation: "0xb755Eb31B62ABA95bfeB09f87956BB766ACEE69C",
55
- codeHash: "0x590f76629def4711ecd0a48bbd50dd78fc95f75247e18ca08f3b1720c9205c35",
56
- capabilities: 123n,
57
- configVersion: 6,
58
- enabled: true,
59
- }) satisfies AdapterRegistrationV1;
60
- export const hmmFixedRegistration = Object.freeze({
61
- adapterId: "0xb13c8134a4c8af50976ca7920a93f2428d1c288a62c8787ce0adbc503c7b6dba",
62
- configSchema: "0x51c5ca14c40012f78425cd1afb1ea77980da3fed0490a00911a8a4ed34792045",
63
- dependencyDigest: "0xc827c83120f0eeb870bf6932420db1a4f3558a2f6548ce2c5529913106cda38f",
64
- venue: "0x8366a39CC670B4001A1121B8F6A443A643e40951",
65
- factory: "0x0000000000000000000000000000000000000000",
66
- hook: "0x0000000000000000000000000000000000000000",
67
- capabilities: 123n,
68
- enabled: true,
69
- }) satisfies ProfileRegistrationV1;
70
- // 22876 bytes; keccak256 0x699b5108d783395b1a88a6c92cc135ce80a45d190266922942d05ddf388ae1ac; append 640-byte V2 constructor.
71
- export const hmmFixedCreationCode: Hex = "0x610240604052348015610010575f5ffd5b5060405161595c38038061595c83398101604081905261002f91610b66565b8061003981610408565b611afc613fff30161461005f57604051632a96f9e160e21b815260040160405180910390fd5b80516001600160a01b039081166080908152602080840151831660a0908152604080860151851660c0526060860151851660e0529285015184166101005284015190921661012052516100b491839101610ceb565b60408051808303601f1901815291905280516020909101206101609081526102408201516101809081526101208301516001600160a01b039081166101a05261026084015163ffffffff166101c052908301519183015160189290921b66ffffffff0000001662ffffff909216919091176101e05260a082015160c08301519082169116105f81610149578260a0015161014f565b8260c001515b90505f82610161578360c00151610167565b8360a001515b6001600160a01b038084166102008190529082166102208190526040805160a081018252928352602083019190915260e087015162ffffff169082015261010086015160020b60608201523060808201529091506101c68160a0902090565b6101405280515f80546001600160a01b03199081166001600160a01b03938416178255602080850151600180546040808901516060808b0151958a166001600160b81b031990941693909317600160a01b62ffffff928316021762ffffff60b81b1916600160b81b91909516029390931782556080808901516002805490971690891617909555825161012081018452958652938b015186169285019290925260c08a0151909416938301939093526101a088015191929083019160ff169081111561029457610294610e90565b60018111156102a5576102a5610e90565b815261014087015162ffffff166020808301919091526101c088015160ff166040808401919091526101e08901516001600160a01b039081166060808601919091526102008b0151151560808601526102208b015160a0909501949094528451600380549183166001600160a01b031992831617815593860151600480549184169183169190911790559185015160058054919092169281168317825593850151929390916001600160a81b031990911617600160a01b83600181111561036e5761036e610e90565b0217905550608082015160028201805460a085015160ff16600160c01b0260ff60c01b1962ffffff909416600160a81b029390931663ffffffff60a81b199091161791909117905560c082015160038201805460e08501511515600160a01b026001600160a81b03199091166001600160a01b03909316929092179190911790556101009091015160049091015550610ec6945050505050565b80516001600160a01b03163b158061042c575060208101516001600160a01b03163b155b80610443575060408101516001600160a01b03163b155b8061045a575060608101516001600160a01b03163b155b80610471575060808101516001600160a01b03163b155b80610488575060c08101516001600160a01b03163b155b8061049e575060a08101516001600160a01b0316155b806104c257508060c001516001600160a01b03168160a001516001600160a01b0316145b806104d9575060a08101516001600160a01b031630145b806104fd575080606001516001600160a01b031681602001516001600160a01b0316145b806105205750805f01516001600160a01b031681602001516001600160a01b0316145b80610537575060208101516001600160a01b031630145b8061054e575060608101516001600160a01b031630145b80610565575060808101516001600160a01b031630145b806105885750805f01516001600160a01b031681608001516001600160a01b0316145b8061059b575060e081015162ffffff1615155b806105b15750600160020b81610100015160020b125b806105c85750610100810151617fff60029190910b135b806105ee57506401000276a36001600160a01b03168161012001516001600160a01b0316105b80610624575073fffd8963efd1fc6a506488495d951d5263988d266001600160a01b03168161012001516001600160a01b031610155b806106405750620f424062ffffff1681610140015162ffffff16115b8061065e575080610140015162ffffff1681610160015162ffffff16115b806106745750600160ff16816101a0015160ff16115b806106ab57506101c081015160ff16158015906106ab57506004816101c0015160ff1610806106ab5750600a816101c0015160ff16115b806106d457506101c081015160ff16158015906106d457506101e08101516001600160a01b0316155b806106ec57506101e08101516001600160a01b031630145b806107105750805f01516001600160a01b0316816101e001516001600160a01b0316145b80610735575080608001516001600160a01b0316816101e001516001600160a01b0316145b806107435750610240810151155b80610757575061026081015163ffffffff16155b8061076d5750602081610260015163ffffffff16115b1561078b5760405163c52a9bd360e01b815260040160405180910390fd5b5f816020015190505f8260800151905082606001516001600160a01b0316826001600160a01b031663f2f4eb266040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107e5573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108099190610ea4565b6001600160a01b03161415806108935750825f01516001600160a01b0316826001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610863573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108879190610ea4565b6001600160a01b031614155b80610913575082604001516001600160a01b0316826001600160a01b031663c7f7fb906040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108e3573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109079190610ea4565b6001600160a01b031614155b80610993575082608001516001600160a01b0316826001600160a01b031663d7b96d4e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610963573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109879190610ea4565b6001600160a01b031614155b80610a13575082602001516001600160a01b0316816001600160a01b03166316eebd1e6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109e3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a079190610ea4565b6001600160a01b031614155b80610a925750825f01516001600160a01b0316816001600160a01b031663dc4c90d36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a62573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610a869190610ea4565b6001600160a01b031614155b15610ab05760405163c52a9bd360e01b815260040160405180910390fd5b505050565b60405161028081016001600160401b0381118282101715610ae457634e487b7160e01b5f52604160045260245ffd5b60405290565b6001600160a01b0381168114610afe575f5ffd5b50565b8051610b0c81610aea565b919050565b805162ffffff81168114610b0c575f5ffd5b8051600281900b8114610b0c575f5ffd5b805163ffffffff81168114610b0c575f5ffd5b805160ff81168114610b0c575f5ffd5b80518015158114610b0c575f5ffd5b5f610280828403128015610b78575f5ffd5b50610b81610ab5565b610b8a83610b01565b8152610b9860208401610b01565b6020820152610ba960408401610b01565b6040820152610bba60608401610b01565b6060820152610bcb60808401610b01565b6080820152610bdc60a08401610b01565b60a0820152610bed60c08401610b01565b60c0820152610bfe60e08401610b11565b60e0820152610c106101008401610b23565b610100820152610c236101208401610b01565b610120820152610c366101408401610b11565b610140820152610c496101608401610b11565b610160820152610c5c6101808401610b34565b610180820152610c6f6101a08401610b47565b6101a0820152610c826101c08401610b47565b6101c0820152610c956101e08401610b01565b6101e0820152610ca86102008401610b57565b61020082015261022083810151908201526102408084015190820152610cd16102608401610b34565b6102608201529392505050565b6001600160a01b03169052565b5f61028082019050610cfe828451610cde565b6020830151610d106020840182610cde565b506040830151610d236040840182610cde565b506060830151610d366060840182610cde565b506080830151610d496080840182610cde565b5060a0830151610d5c60a0840182610cde565b5060c0830151610d6f60c0840182610cde565b5060e0830151610d8660e084018262ffffff169052565b50610100830151610d9d61010084018260020b9052565b50610120830151610db2610120840182610cde565b50610140830151610dcb61014084018262ffffff169052565b50610160830151610de461016084018262ffffff169052565b50610180830151610dfe61018084018263ffffffff169052565b506101a0830151610e156101a084018260ff169052565b506101c0830151610e2c6101c084018260ff169052565b506101e0830151610e416101e0840182610cde565b50610200830151610e5761020084018215159052565b50610220830151610220830152610240830151610240830152610260830151610e8961026084018263ffffffff169052565b5092915050565b634e487b7160e01b5f52602160045260245ffd5b5f60208284031215610eb4575f5ffd5b8151610ebf81610aea565b9392505050565b60805160a05160c05160e05161010051610120516101405161016051610180516101a0516101c0516101e051610200516102205161480061115c5f395f8181611cad01528181611db30152612e6401525f8181611c6c01528181611d780152612e4301525f8181610405015281816105010152612be201525f81816104bf0152612fa301525f8181610451015261103701525f61065f01525f6103a801525f81816103200152818161081201528181610c0301528181610ea70152818161109d015281816112f6015281816116140152818161196801528181611ab001528181611d4d01528181612223015281816123a4015281816126d801528181612b6401528181612c1101528181612f3001528181612f6b015261371a01525f818161072e01528181612895015281816131e501526137fa01525f818161049801528181610bcb01528181610d8001528181610ef501528181611afc01528181611b6701528181611bd101528181611d2701528181612249015281816122ed015281816123810152612e2201525f81816106d3015281816128e401528181613234015261375201525f6105d201525f81816102920152818161079801528181610aff01528181610ffa0152818161292e0152818161301701526137d701525f81816106860152818161098701528181610a1401528181610c8101528181610e8601528181610f69015281816111270152818161126601528181611504015281816116fb015281816118a501528181611d060152818161250c0152818161259b0152818161261801528181612b8b01528181612c4901528181612e01015281816133de015281816138b601528181613a7201528181613b0101528181613b7e01528181613c4d01528181613c980152613d0501526148005ff3fe608060405234801561000f575f5ffd5b5060043610610202575f3560e01c80630268e293146102065780630581555f1461021b5780630885f7321461022e57806321d0ee701461024e578063259982e51461027a5780632b20e3971461028d57806333827438146102cc578063359b4f30146102d45780633e451d6a146102f557806342ea83e01461030857806347f8496c1461031b5780635524d54814610342578063575e24b4146103655780635955d09a146103a357806360f89f2e146103ca5780636fe7e6eb146103dd578063747a68cd146103f05780637dbeb94e14610403578063847211a6146104395780638bc801c11461044c57806391dd7346146104735780639759164a146104935780639e5fe062146104ba578063a3f4bac7146104f6578063a8691114146104ff578063aae49d7014610528578063ac4e405414610532578063ac5555aa1461053b578063b47b2fb11461054e578063b6a8b0fa14610584578063c5c51dca14610597578063c5fbb298146105ac578063c67046af146105bf578063c7f7fb90146105cd578063ca266dfe146105f4578063ce1b8e4f1461065a578063dc4c90d314610681578063e1b4af69146106a8578063e2e65ec1146106bb578063f2f4eb26146106ce578063f399150c146106f5578063f9bc70e714610716578063fc0c546a14610729578063fd5b6d5b14610750575b5f5ffd5b610219610214366004613de7565b610763565b005b6040515f81526020015b60405180910390f35b61024161023c366004613e01565b610866565b6040516102259190613e62565b61026161025c366004613f64565b61097b565b6040516001600160e01b03199091168152602001610225565b610261610288366004613f64565b610a08565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b039091168152602001610225565b6016546102b4565b6102e76102e2366004613fe4565b610a9c565b604051908152602001610225565b6102e7610303366004614012565b610ab9565b61021961031636600461402d565b610aca565b6102e77f000000000000000000000000000000000000000000000000000000000000000081565b610355610350366004613e01565b610c5e565b6040519015158152602001610225565b61037861037336600461407c565b610c73565b604080516001600160e01b03199094168452602084019290925262ffffff1690820152606001610225565b6102e77f000000000000000000000000000000000000000000000000000000000000000081565b6102196103d83660046140d5565b610e77565b6102616103eb36600461412d565b610f5d565b6102e76103fe366004614012565b6110f4565b7f00000000000000000000000000000000000000000000000000000000000000005b60405162ffffff9091168152602001610225565b6102e7610447366004613e01565b611108565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b610486610481366004614184565b61111a565b60405161022591906141c2565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b6104e17f000000000000000000000000000000000000000000000000000000000000000081565b60405163ffffffff9091168152602001610225565b6102b4613fff81565b7f000000000000000000000000000000000000000000000000000000000000000060181c6104e1565b610425620f424081565b6102b4611afc81565b610355610549366004613e01565b61123f565b61056161055c3660046141f7565b611259565b604080516001600160e01b03199093168352600f9190910b602083015201610225565b610261610592366004614277565b6114f8565b61059f6115aa565b60405161022591906142d0565b6102e76105ba366004613e01565b611655565b5f6040516102259190614312565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b610607610602366004613e01565b611665565b604051610225919081516001600160a01b03908116825260208084015182169083015260408084015162ffffff169083015260608084015160020b90830152608092830151169181019190915260a00190565b6102e77f000000000000000000000000000000000000000000000000000000000000000081565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b6102616106b6366004614277565b6116ef565b6102e76106c9366004613fe4565b6117a9565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b610708610703366004613de7565b6117c7565b604051610225929190614325565b610425610724366004614333565b6119d1565b6102b47f000000000000000000000000000000000000000000000000000000000000000081565b6102e761075e366004613fe4565b611a3e565b3068929eee149b4bd2126854036107815763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146107d5576040516282b42960e81b815260040160405180910390fd5b6107de81611a5c565b601354156107ff576040516304c7cf6760e51b815260040160405180910390fd5b4260135561080b611a9b565b60405142907f0000000000000000000000000000000000000000000000000000000000000000907ff1bac50d2c6f6c83cb8ff6fac488b03adc5fb0cc9fae30db2077588d5d9e5fbd905f90a33868929eee149b4bd212685550565b60408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091526108b782611aae565b6040805161012081018252600380546001600160a01b039081168352600454811660208401526005549081169383019390935290916060830190600160a01b900460ff16600181111561090c5761090c613e25565b600181111561091d5761091d613e25565b8152600282015462ffffff600160a81b820416602083015260ff600160c01b9091048116604083015260038301546001600160a01b0381166060840152600160a01b9004161515608082015260049091015460a09091015292915050565b5f336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146109c4576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036109e25763ab143c065f526004601cfd5b6109eb85611a5c565b6109f58685611aed565b5063021d0ee760e41b5b95945050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610a51576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610a6f5763ab143c065f526004601cfd5b610a7885611a5c565b610a828685611aed565b610a8a611c3e565b5063259982e560e01b95945050505050565b5f610aa683611aae565b610aaf82611c69565b5490505b92915050565b5f610ac382611c69565b5492915050565b3068929eee149b4bd212685403610ae85763ab143c065f526004601cfd5b3068929eee149b4bd2126855336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b3c576040516282b42960e81b815260040160405180910390fd5b610b5d610b58610b51368590038501856143a3565b60a0902090565b611aae565b60125460ff1615610b8157604051630ea075bf60e21b815260040160405180910390fd5b610b8a81611d04565b610b938161200d565b610ba06020820182614012565b600380546001600160a01b0319166001600160a01b039283161790556012805460ff191660011790557f000000000000000000000000000000000000000000000000000000000000000016610bf86020830183614012565b6001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007ffafdbdd88ac30f0aa936e576be61816ea751908540523fa81b80c4a406ad7bec60405160405180910390a43868929eee149b4bd21268555050565b5f610c6882611aae565b505060125460ff1690565b5f8080336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610cbe576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610cdc5763ab143c065f526004601cfd5b60155460ff1615610d005760405163558a1e0360e11b815260040160405180910390fd5b610d0987611a5c565b610d11611c3e565b60035f610d1e8a896120a6565b90505f610d2b8a8a6120d3565b90505f62ffffff831615801590610d495750610d49828c8c87612118565b15610d6757610d64610d5e8b6020013561219c565b846121d7565b90505b6040516364b3357d60e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063c9666afa90610db9908f908f908790600401614500565b602060405180830381865afa158015610dd4573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610df8919061452b565b9050610e348c610e0b60208e018e614542565b610e15575f610e17565b825b610e2460208f018f614542565b610e2e5783612215565b5f612215565b8115610e5657610e5683838760020160189054906101000a900460ff16612402565b506315d7892d60e21b965060801b94505f9350505050955095509592505050565b610e8083611a5c565b5f610ecb7f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000612747565b5050600354919250506001600160a01b038481169116141580610f205750816001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b80610f3257506001600160a01b038116155b15610f4f5760405162820f3560e61b815260040160405180910390fd5b610f576127f9565b50505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610fa6576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd212685403610fc45763ab143c065f526004601cfd5b610fd9610b58610b51368790038701876143a3565b60125460ff161580610ff25750601254610100900460ff165b8061102f57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316856001600160a01b031614155b8061106c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316836001600160a01b031614155b156110895760405162820f3560e61b815260040160405180910390fd5b6012805461ff0019166101001790556040517f0000000000000000000000000000000000000000000000000000000000000000907febcc9ffea17e08841d7588f2ecd87720e1cfb444bb3b5e662c4a5005c3c94ab2905f90a250636fe7e6eb60e01b5b949350505050565b5f6110fe82611c69565b6003015492915050565b5f61111282611aae565b505060135490565b6060336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611164576040516282b42960e81b815260040160405180910390fd5b601454158061118c5750601454838360405161118192919061455b565b604051809103902014155b156111aa5760405163f7a632f560e01b815260040160405180910390fd5b5f60148190556111bc838501856143a3565b90506111cc610b588260a0902090565b601254610100900460ff166111f35760405162820f3560e61b815260040160405180910390fd5b5f611200825f01516129de565b90505f61121083602001516129de565b90508181604051602001611225929190614325565b604051602081830303815290604052935050505092915050565b5f61124982611aae565b5050601254610100900460ff1690565b5f80336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146112a3576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd2126854036112c15763ab143c065f526004601cfd5b60155460ff16156112e55760405163558a1e0360e11b815260040160405180910390fd5b6112ee87611a5c565b5f61131c60107f00000000000000000000000000000000000000000000000000000000000000008b8a612a77565b9050611329885f5f612215565b60035f6113368a8a6120d3565b90505f61134660208c018c614012565b6001600160a01b0316826001600160a01b0316146113705761136b60208c018c614012565b611380565b61138060408c0160208d01614012565b905062ffffff84161580159061139d575061139d828c8c86612118565b15611436575f6113b96113b38c6020013561219c565b866121d7565b90508015611434575f6113cf60208e018e614012565b6001600160a01b0316846001600160a01b0316146113f6576113f18b600f0b90565b611400565b6114008b60801d90565b90506114108260208e013561457e565b81600f0b146114325760405163161b48a960e21b815260040160405180910390fd5b505b505b5f62ffffff8516158015906114525750611452828d8d87612118565b156114d3575f61146560208e018e614012565b6001600160a01b0316836001600160a01b03161461148c576114878b600f0b90565b611496565b6114968b60801d90565b90506114ad6114a782600f0b61219c565b876121d7565b915081156114d1576114d183838760020160189054906101000a900460ff16612402565b505b6114de8c8c8c612ae5565b63b47b2fb160e01b9d909c509a5050505050505050505050565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611541576040516282b42960e81b815260040160405180910390fd5b3068929eee149b4bd21268540361155f5763ab143c065f526004601cfd5b60155460ff16156115835760405163558a1e0360e11b815260040160405180910390fd5b61158c86611a5c565b611597868686612215565b50635b54587d60e11b9695505050505050565b60125460609060ff166115bd575f6115c0565b60015b60ff166001600160401b038111156115da576115da61434d565b604051908082528060200260200182016040528015611603578160200160208202803683370190505b5060125490915060ff1615611652577f0000000000000000000000000000000000000000000000000000000000000000815f81518110611645576116456145a5565b6020026020010181815250505b90565b5f61165f82611aae565b5f610ab3565b6040805160a0810182525f8082526020820181905291810182905260608101829052608081019190915261169882611aae565b50506040805160a0810182525f546001600160a01b039081168252600154808216602084015262ffffff600160a01b82041693830193909352600160b81b909204600290810b606083015254909116608082015290565b5f336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611738576040516282b42960e81b815260040160405180910390fd5b60155460ff161561175c5760405163558a1e0360e11b815260040160405180910390fd5b3068929eee149b4bd21268540361177a5763ab143c065f526004601cfd5b61178386611a5c565b61178e865f5f612215565b611796612b04565b5063e1b4af6960e01b9695505050505050565b5f6117b383611aae565b6117bc82611c69565b600101549392505050565b5f5f3068929eee149b4bd2126854036117e75763ab143c065f526004601cfd5b3068929eee149b4bd212685560155460ff16156118175760405163558a1e0360e11b815260040160405180910390fd5b61182083611a5c565b6003546001600160a01b0316331461184a576040516282b42960e81b815260040160405180910390fd5b60085415158061185b5750600c5415155b1561195c575f8360405160200161187291906145b9565b60408051601f1981840301815290829052805160208201206014556348c8949160e01b825291505f906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906348c89491906118da9085906004016141c2565b5f604051808303815f875af11580156118f5573d5f5f3e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261191c91908101906145c7565b601454909150156119405760405163f7a632f560e01b815260040160405180910390fd5b808060200190518101906119549190614659565b909450925050505b336001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f4a93be8d0a356d70b54fdf016f78a2ed8b8a3c420952848eb4f4b2c4546405b684846040516119b8929190614325565b60405180910390a33868929eee149b4bd2126855915091565b5f3068929eee149b4bd2126854036119f05763ab143c065f526004601cfd5b601254610100900460ff16611a175760405162820f3560e61b815260040160405180910390fd5b611a1f6127f9565b5f611a2983612b15565b509050611a3581612cf9565b9150505b919050565b5f611a4883611aae565b611a5182611c69565b600201549392505050565b611a71610b58610b51368490038401846143a3565b601254610100900460ff16611a985760405162820f3560e61b815260040160405180910390fd5b50565b611aac632520a12d60e11b5f612d61565b565b7f00000000000000000000000000000000000000000000000000000000000000008114611a985760405162820f3560e61b815260040160405180910390fd5b60155460ff168015611b3e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316141580611b3e5750604081013515155b15611b5c5760405163558a1e0360e11b815260040160405180910390fd5b6013545f03611bbb577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614611bb757604051637cd5a0ad60e01b815260040160405180910390fd5b5050565b600654600160a01b900460ff168015611c0657507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031614155b8015611c20575060155460ff1680611c2057506016548214155b15611bb757604051630af9fb3360e21b815260040160405180910390fd5b601554610100900460ff1615611c5057565b611c586127f9565b6015805461ff001916610100179055565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611cab57506008919050565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b031603611cec5750600c919050565b60405162820f3560e61b815260040160405180910390fd5b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f611d71837f0000000000000000000000000000000000000000000000000000000000000000612747565b50505090507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03163b5f1480611dd657506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163b155b80611de957506001600160a01b03811615155b80611e1557506001600160a01b038216611e096040860160208701614012565b6001600160a01b031614155b80611e4357506005546001600160a01b0316611e376060860160408701614012565b6001600160a01b031614155b80611e8b5750600554600160a01b900460ff166001811115611e6757611e67613e25565b611e77608086016060870161467b565b6001811115611e8857611e88613e25565b14155b80611eb85750600554600160a81b900462ffffff16611eb060a0860160808701614699565b62ffffff1614155b80611ee15750600554600160c01b900460ff16611edb60c0860160a087016146b2565b60ff1614155b80611f0f57506006546001600160a01b0316611f0360e0860160c08701614012565b6001600160a01b031614155b80611f3a5750600654600160a01b900460ff161515611f35610100860160e08701614542565b151514155b80611f4c575060075461010085013514155b80611f6b5750611f5f6020850185614012565b6001600160a01b03163b155b80611f9357506001600160a01b038216611f886020860186614012565b6001600160a01b0316145b80611fb2575030611fa76020860186614012565b6001600160a01b0316145b80611fda57506001600160a01b038316611fcf6020860186614012565b6001600160a01b0316145b15611ff85760405163c52a9bd360e01b815260040160405180910390fd5b610f576120086020860186614012565b612dff565b5f61201b6020830183614012565b90506306704e8760e31b637f5a7c7b60e01b5f80612064565b5f604051838152602081600483865afa601f3d118116612052575f5ffd5b5051905060a081901c15610ab3575f5ffd5b61206e8486612034565b91503061207b8484612034565b1490508061209c5760405163c52a9bd360e01b815260040160405180910390fd5b5060165550505050565b5f5f5f6120b284612b15565b604082015191935091506120c960108488886132be565b9695505050505050565b5f6120e16020830183614542565b15155f60208401351214612104576120ff6040840160208501614012565b612111565b6121116020840184614012565b9392505050565b5f8060016002840154600160a01b900460ff16600181111561213c5761213c613e25565b146121745761214e6020850185614542565b612167576121626040860160208701614012565b612183565b6121626020860186614012565b60028301546001600160a01b03165b6001600160a01b03878116911614915050949350505050565b5f600160ff1b82036121c157604051637e2df70960e11b815260040160405180910390fd5b5f82126121ce5781610ab3565b610ab3826146d2565b5f6121eb838362ffffff16620f424061333c565b905060016001607f1b03811115610ab357604051637e2df70960e11b815260040160405180910390fd5b60405162e568cf60e71b81527f000000000000000000000000000000000000000000000000000000000000000060048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906372b4678090602401602060405180830381865afa158015612296573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122ba919061452b565b5f036122c557505050565b6015805460ff191660011790556040516381f8a9d160e01b81525f9081906001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906381f8a9d190612326908890889088906004016146ec565b60408051808303815f875af1158015612341573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123659190614659565b6015805460ff1916905560405191935091506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016907f0000000000000000000000000000000000000000000000000000000000000000907fa30ca6140dfb2cac1c1021c5303d8dc7de0cd4db47221fb3ad068fac7ef8185e906123f39086908690614325565b60405180910390a35050505050565b3068929eee149b4bd2126854036124205763ab143c065f526004601cfd5b3068929eee149b4bd2126855825f61243782611c69565b90505f8160020154825f015461244d919061470b565b90506124608160016001607f1b0361470b565b851115612472576124728683836133ca565b5f60ff8516156124a557606461248b60ff87168861471e565b61249690607d61473d565b6124a0919061471e565b6124a7565b5f5b905085835f015f8282546124bb9190614754565b9250508190555080836001015f8282546124d59190614754565b9250508190555085836003015f8282546124ef9190614754565b9091555050604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e906125429030908990600401614767565b602060405180830381865afa15801561255d573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190612581919061452b565b604051630ab714fb60e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063156e29f6906125d490309089908c90600401614781565b5f604051808303815f87803b1580156125eb575f5ffd5b505af11580156125fd573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e9061264f9030908a90600401614767565b602060405180830381865afa15801561266a573d5f5f3e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061268e919061452b565b9050818110806126a057508782820314155b806126ae5750846003015481105b156126cc5760405163104eed1d60e31b815260040160405180910390fd5b856001600160a01b03167f00000000000000000000000000000000000000000000000000000000000000007f2616e25de5abcc9e6a698b140fb6c92f55ace21b7a57f76172f195dbbf693af68a86604051612728929190614325565b60405180910390a35050505050503868929eee149b4bd2126855505050565b5f5f5f5f5f6127558661346e565b604051631e2eaeaf60e01b8152600481018290529091505f906001600160a01b03891690631e2eaeaf90602401602060405180830381865afa15801561279d573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906127c1919061452b565b90506001600160a01b03811695508060a01c60020b945062ffffff8160b81c16935062ffffff8160d01c169250505092959194509250565b601554610100900460ff161561280b57565b6003546001600160a01b03165f61283161282c83630d96a1bf60e21b6134aa565b6134c4565b90505f6128538263537df88f60e11b6001600160a01b038616602460c06134d6565b9050606081015160a01c815160a01c171561286c575f5ffd5b60a081015160808201511760101c15612883575f5ffd5b60c081016040525f6001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166128c961282c8563514526c360e11b6134aa565b6001600160a01b031614158061292457506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661291861282c8563056a0fbf60e31b6134aa565b6001600160a01b031614155b80612959575081517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031614155b8061296d57505f61296b836020015190565b145b8061298157505f61297f836040015190565b145b8061299557505f612993836060015190565b145b806129ae57508061ffff166129ab8360a0015190565b14155b806129c05750608082015160a0830151115b15610f575760405163c52a9bd360e01b815260040160405180910390fd5b5f81816129ea82611c69565b80549091505f819003612a0157505f949350505050565b612a1b8583846002015484612a16919061470b565b6133ca565b6001820180545f808555918290556002840191909155612a3b818361470b565b600654909550612a569085906001600160a01b03168361350b565b600354612a6e9085906001600160a01b03168761350b565b50505050919050565b60018401545f9063ffffffff16801580612a9c5750612a9785858561359b565b865414155b15612abd576040516001620787ab60e51b0319815260040160405180910390fd5b612ac86001826147a5565b5f87556001909601805463ffffffff191690555093949350505050565b608081811c15159082901b151516610f57632f02d37f60e21b82612d61565b611aac6309f17b8160e31b5f612d61565b612b6160408051610120810182525f80825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290529061010082015290565b5f7f0000000000000000000000000000000000000000000000000000000000000000818080612bb07f000000000000000000000000000000000000000000000000000000000000000085612747565b509250925092508062ffffff165f14612bdc5760405163c52a9bd360e01b815260040160405180910390fd5b8194505f7f000000000000000000000000000000000000000000000000000000000000000090506040518061012001604052807f00000000000000000000000000000000000000000000000000000000000000008152602001856001600160a01b03168152602001612c6e7f0000000000000000000000000000000000000000000000000000000000000000886135d0565b6001600160801b0316815260200189602001358152602001895f016020810190612c989190614542565b1515815260055462ffffff600160a81b8204811660208401528416604083015263ffffffff601885901c16606083015260809091019060ff600160a01b909104166001811115612cea57612cea613e25565b81525096505050505050915091565b5f600160ff1b826060015103612d2257604051637e2df70960e11b815260040160405180910390fd5b5060a081015160c082015181908062ffffff168362ffffff161015612d5a576040516302cce67760e31b815260040160405180910390fd5b5050919050565b6016546001600160a01b038116612d7757505050565b5f612710603f612d8b622dc6c0604061473d565b612d95919061471e565b612d9f9190614754565b905063c52a9bd360e01b7f6e819d90474482ea53f17905af71585dac910232de1a68f42349cd60badb2874825a1015612dda57815f5260045ffd5b855f52846004525f5f60245f5f88622dc6c0f1612df7578060205fa15b505050505050565b7f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000007f00000000000000000000000000000000000000000000000000000000000000005f612e9861282c87630d96a1bf60e21b6134aa565b90505f612ea6878585613653565b90506001600160a01b038616612ec661282c8963dc4c90d360e01b6134aa565b6001600160a01b0316141580612f0157506001600160a01b038516612ef561282c89636bdcb6a760e11b6134aa565b6001600160a01b031614155b80612f28575030612f1c61282c89636620eee760e11b6134aa565b6001600160a01b031614155b80612f6357507f0000000000000000000000000000000000000000000000000000000000000000612f6088631f06e1a760e11b6134aa565b14155b80612f9657507f0000000000000000000000000000000000000000000000000000000000000000612f93886136ee565b14155b80612fd7575063ffffffff7f000000000000000000000000000000000000000000000000000000000000000016612fd488634f2ff03160e11b6134aa565b14155b8061300757506001600160a01b038616612ffb61282c8763dc4c90d360e01b6134aa565b6001600160a01b031614155b8061305757506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661304b61282c87630b775e8f60e11b6134aa565b6001600160a01b031614155b8061307157505f61306e8662e568cf60e71b613711565b14155b80613090575061309061308b86630323715f60e11b613711565b613742565b806130ab57505f6130a886635c0af38360e01b613711565b14155b806130d257505f6130c661282c87630961712f60e01b613711565b6001600160a01b031614155b806130db575080155b806130ee57506001600160a01b0382163b155b8061310157506001600160a01b03821630145b8061311d5750866001600160a01b0316826001600160a01b0316145b806131395750846001600160a01b0316826001600160a01b0316145b806131555750856001600160a01b0316826001600160a01b0316145b806131715750836001600160a01b0316826001600160a01b0316145b8061318d5750826001600160a01b0316826001600160a01b0316145b806131a557506006546001600160a01b038381169116145b806131bd57506006546001600160a01b038881169116145b156131db5760405163c52a9bd360e01b815260040160405180910390fd5b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661321961282c8463514526c360e11b6134aa565b6001600160a01b031614158061327457506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001661326861282c8463056a0fbf60e31b6134aa565b6001600160a01b031614155b8061328e575061328e61308b8363b3f05b9760e01b6134aa565b156132ac5760405163c52a9bd360e01b815260040160405180910390fd5b6132b582613750565b50505050505050565b60018401545f9063ffffffff16156132ec576040516001620787ab60e51b0319815260040160405180910390fd5b83516132f785612cf9565b915061330481858561359b565b865561331662ffffff831660016147c1565b600196909601805463ffffffff191663ffffffff90971696909617909555949350505050565b828202818385830414851517026133c3575f198385098181108201900382848609835f0384168285116133765763ae47f7025f526004601cfd5b93849004938382119092035f839003839004600101029203041760026003830281188084028203028084028203028084028203028084028203028084028203028084029091030202612111565b0492915050565b805f036133d657505050565b8281613402827f0000000000000000000000000000000000000000000000000000000000000000613a30565b1015613421576040516365169c1d60e01b815260040160405180910390fd5b81836003015f828254613434919061470b565b909155506134459050818484613a5a565b613450843084613c39565b81836002015f8282546134639190614754565b909155505050505050565b6040515f9061348d908390600690602001918252602082015260400190565b604051602081830303815290604052805190602001209050919050565b5f806134bb848483600460206134d6565b51949350505050565b5f8160a01c156134d2575f5ffd5b5090565b60405184815260231983016134ec578360048201525b81818483895afa6134ff573d5f823e3d81fd5b813d10156109ff575f5ffd5b805f0361351757505050565b5f6135228430613a30565b90505f61352f8585613a30565b905061353c858585613d87565b5f6135478630613a30565b90505f6135548787613a30565b90508382118061356657508482850314155b8061357057508281105b8061357d57508483820314155b156132b557604051631dc418c360e31b815260040160405180910390fd5b5f8383836040516020016135b1939291906147dd565b6040516020818303038152906040528051906020012090509392505050565b5f5f6135db8361346e565b90505f6135e9600383614754565b604051631e2eaeaf60e01b8152600481018290529091506001600160a01b03861690631e2eaeaf90602401602060405180830381865afa15801561362f573d5f5f3e3d5ffd5b505050506040513d601f19601f820116820180604052508101906109ff919061452b565b5f8061366b856371a9730560e01b83600460206134d6565b80519091506001600160a01b0380861691908516903d906001600160401b038111601f1983018211171561369d575f5ffd5b602081863e8451602080838503030481116001600160401b03821117156136c2575f5ffd5b600281036136e157604060208301873e83602087015114858751141696505b5050505050509392505050565b5f806137068363182148ef60e01b83600460a06134d6565b60a090209392505050565b5f5f6134bb84847f0000000000000000000000000000000000000000000000000000000000000000602460206134d6565b5f60018211156134d2575f5ffd5b7f00000000000000000000000000000000000000000000000000000000000000005f6137898263086fce0d60e11b8360046101606134d6565b90505f6005905080604083015111602083015160201c17156137a9575f5ffd5b6101408201606083015b818110156137d157805160a01c156137c9575f5ffd5b6020016137b3565b505081517f000000000000000000000000000000000000000000000000000000000000000091507f00000000000000000000000000000000000000000000000000000000000000009080158061382c57506001604085015114155b8061384a57506001600160a01b038316613847856060015190565b14155b8061386857506001600160a01b038316613865856080015190565b14155b8061388657506001600160a01b0382166138838560a0015190565b14155b806138a657506005546001600160a01b03166138a38560c0015190565b14155b806138e457506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000166138e18560e0015190565b14155b15613901576040516282b42960e81b815260040160405180910390fd5b5f61390d856020015190565b905061392686636373dff160e11b8460246101c06134d6565b94505f600190505f600590508060a0880151118260808901511117604088015160a01c1715613953575f5ffd5b610120870160c088015b8181101561397b57805160a01c15613973575f5ffd5b60200161395d565b50506101a0870161012088015b818110156139a657805160201c1561399e575f5ffd5b602001613988565b5050865184925090501415806139c15750600160a086015114155b806139df57506001600160a01b0383166139dc8660c0015190565b14155b806139fd57506001600160a01b0387166139fa8660e0015190565b14155b80613a13575061014085015163ffffffff821610155b156132b5576040516282b42960e81b815260040160405180910390fd5b5f816014526370a0823160601b5f5260208060246010865afa601f3d111660205102905092915050565b604051627eeac760e11b81525f906001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169062fdd58e90613aa89030908890600401614767565b602060405180830381865afa158015613ac3573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613ae7919061452b565b604051637a94c56560e11b81529091506001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063f5298aca90613b3a90309088908790600401614781565b5f604051808303815f87803b158015613b51575f5ffd5b505af1158015613b63573d5f5f3e3d5ffd5b5050604051627eeac760e11b81525f92506001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016915062fdd58e90613bb59030908990600401614767565b602060405180830381865afa158015613bd0573d5f5f3e3d5ffd5b505050506040513d601f19601f82011682018060405250810190613bf4919061452b565b905081811180613c0657508281830314155b80613c145750836003015481105b15613c325760405163104eed1d60e31b815260040160405180910390fd5b5050505050565b805f03613c4557505050565b825f613c71827f0000000000000000000000000000000000000000000000000000000000000000613a30565b90505f613c7e8386613a30565b604051630b0d9c0960e01b81529091506001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001690630b0d9c0990613cd190899089908990600401614781565b5f604051808303815f87803b158015613ce8575f5ffd5b505af1158015613cfa573d5f5f3e3d5ffd5b505050505f613d29847f0000000000000000000000000000000000000000000000000000000000000000613a30565b90505f613d368588613a30565b905083821180613d4857508582850314155b80613d5257508281105b80613d5f57508583820314155b15613d7d57604051631dc418c360e31b815260040160405180910390fd5b5050505050505050565b816014528060345263a9059cbb60601b5f5260205f604460105f875af18060015f511416613dc757803d853b151710613dc7576390b8ec185f526004601cfd5b505f603452505050565b5f60a08284031215613de1575f5ffd5b50919050565b5f60a08284031215613df7575f5ffd5b6121118383613dd1565b5f60208284031215613e11575f5ffd5b5035919050565b6001600160a01b03169052565b634e487b7160e01b5f52602160045260245ffd5b60028110611a9857634e487b7160e01b5f52602160045260245ffd5b613e5e81613e39565b9052565b81516001600160a01b03908116825260208084015190911690820152604080830151610120830191613e9690840182613e18565b506060830151613ea96060840182613e55565b506080830151613ec0608084018262ffffff169052565b5060a0830151613ed560a084018260ff169052565b5060c0830151613ee860c0840182613e18565b5060e0830151613efc60e084018215159052565b5061010092830151919092015290565b6001600160a01b0381168114611a98575f5ffd5b5f5f83601f840112613f30575f5ffd5b5081356001600160401b03811115613f46575f5ffd5b602083019150836020828501011115613f5d575f5ffd5b9250929050565b5f5f5f5f5f858703610160811215613f7a575f5ffd5b8635613f8581613f0c565b9550613f948860208901613dd1565b9450608060bf1982011215613fa7575f5ffd5b5060c0860192506101408601356001600160401b03811115613fc7575f5ffd5b613fd388828901613f20565b969995985093965092949392505050565b5f5f60408385031215613ff5575f5ffd5b82359150602083013561400781613f0c565b809150509250929050565b5f60208284031215614022575f5ffd5b813561211181613f0c565b5f5f8284036101c0811215614040575f5ffd5b61404a8585613dd1565b9250610120609f198201121561405e575f5ffd5b5060a0830190509250929050565b5f60608284031215613de1575f5ffd5b5f5f5f5f5f6101408688031215614091575f5ffd5b853561409c81613f0c565b94506140ab8760208801613dd1565b93506140ba8760c0880161406c565b92506101208601356001600160401b03811115613fc7575f5ffd5b5f5f5f60e084860312156140e7575f5ffd5b6140f18585613dd1565b925060a084013561410181613f0c565b915060c084013561411181613f0c565b809150509250925092565b8035600281900b8114611a39575f5ffd5b5f5f5f5f6101008587031215614141575f5ffd5b843561414c81613f0c565b935061415b8660208701613dd1565b925060c085013561416b81613f0c565b915061417960e0860161411c565b905092959194509250565b5f5f60208385031215614195575f5ffd5b82356001600160401b038111156141aa575f5ffd5b6141b685828601613f20565b90969095509350505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f5f5f5f5f5f610160878903121561420d575f5ffd5b863561421881613f0c565b95506142278860208901613dd1565b94506142368860c0890161406c565b935061012087013592506101408701356001600160401b03811115614259575f5ffd5b61426589828a01613f20565b979a9699509497509295939492505050565b5f5f5f5f5f5f610120878903121561428d575f5ffd5b863561429881613f0c565b95506142a78860208901613dd1565b945060c0870135935060e087013592506101008701356001600160401b03811115614259575f5ffd5b602080825282518282018190525f918401906040840190835b818110156143075783518352602093840193909201916001016142e9565b509095945050505050565b6020810161431f83613e39565b91905290565b918252602082015260400190565b5f60608284031215614343575f5ffd5b612111838361406c565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156143895761438961434d565b604052919050565b803562ffffff81168114611a39575f5ffd5b5f60a08284031280156143b4575f5ffd5b5060405160a081016001600160401b03811182821017156143d7576143d761434d565b60405282356143e581613f0c565b815260208301356143f581613f0c565b602082015261440660408401614391565b60408201526144176060840161411c565b6060820152608083013561442a81613f0c565b60808201529392505050565b803561444181613f0c565b6001600160a01b03168252602081013561445a81613f0c565b6001600160a01b0316602083015262ffffff61447860408301614391565b16604083015261448a6060820161411c565b60020b606083015260808101356144a081613f0c565b6001600160a01b03166080929092019190915250565b80358015158114611a39575f5ffd5b6144ce816144b6565b151582526020818101359083015260408101356144ea81613f0c565b6001600160a01b03166040929092019190915250565b610120810161450f8286614436565b61451c60a08301856144c5565b82610100830152949350505050565b5f6020828403121561453b575f5ffd5b5051919050565b5f60208284031215614552575f5ffd5b612111826144b6565b818382375f9101908152919050565b634e487b7160e01b5f52601160045260245ffd5b8082018281125f83128015821682158216171561459d5761459d61456a565b505092915050565b634e487b7160e01b5f52603260045260245ffd5b60a08101610ab38284614436565b5f602082840312156145d7575f5ffd5b81516001600160401b038111156145ec575f5ffd5b8201601f810184136145fc575f5ffd5b80516001600160401b038111156146155761461561434d565b614628601f8201601f1916602001614361565b81815285602083850101111561463c575f5ffd5b8160208401602083015e5f91810160200191909152949350505050565b5f5f6040838503121561466a575f5ffd5b505080516020909101519092909150565b5f6020828403121561468b575f5ffd5b813560028110612111575f5ffd5b5f602082840312156146a9575f5ffd5b61211182614391565b5f602082840312156146c2575f5ffd5b813560ff81168114612111575f5ffd5b5f600160ff1b82016146e6576146e661456a565b505f0390565b60e081016146fa8286614436565b60a082019390935260c00152919050565b81810381811115610ab357610ab361456a565b5f8261473857634e487b7160e01b5f52601260045260245ffd5b500490565b8082028115828204841417610ab357610ab361456a565b80820180821115610ab357610ab361456a565b6001600160a01b0392831681529116602082015260400190565b6001600160a01b039384168152919092166020820152604081019190915260600190565b63ffffffff8281168282160390811115610ab357610ab361456a565b63ffffffff8181168382160190811115610ab357610ab361456a565b8381526001600160a01b038316602082015260a081016110ec60408301846144c556";