@layerzerolabs/lz-evm-sdk-v2 2.0.17 → 2.0.18

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 (95) hide show
  1. package/artifacts/contracts/Executor.sol/Executor.json +2 -2
  2. package/artifacts/contracts/ExecutorFeeLib.sol/ExecutorFeeLib.json +18 -2
  3. package/artifacts/contracts/interfaces/IExecutorFeeLib.sol/IExecutorFeeLib.json +16 -0
  4. package/artifacts/contracts/uln/dvn/DVN.sol/DVN.json +2 -2
  5. package/artifacts/contracts/uln/dvn/DVNFeeLib.sol/DVNFeeLib.json +13 -2
  6. package/artifacts/contracts/uln/dvn/adapters/CCIP/CCIPDVNAdapter.sol/CCIPDVNAdapter.json +2 -2
  7. package/artifacts/contracts/uln/dvn/adapters/CCIP/CCIPDVNAdapterFeeLib.sol/CCIPDVNAdapterFeeLib.json +14 -3
  8. package/artifacts/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapter.sol/AxelarDVNAdapter.json +2 -2
  9. package/artifacts/contracts/uln/dvn/adapters/axelar/AxelarDVNAdapterFeeLib.sol/AxelarDVNAdapterFeeLib.json +13 -2
  10. package/artifacts/contracts/uln/interfaces/IDVNFeeLib.sol/IDVNFeeLib.json +11 -0
  11. package/artifacts/contracts/uln/interfaces/adapters/IAxelarDVNAdapterFeeLib.sol/IAxelarDVNAdapterFeeLib.json +11 -0
  12. package/artifacts/contracts/uln/interfaces/adapters/ICCIPDVNAdapterFeeLib.sol/ICCIPDVNAdapterFeeLib.json +12 -1
  13. package/deployments/avalanche-testnet/AxelarDVNAdapterFeeLib.json +10 -10
  14. package/deployments/avalanche-testnet/AxelarDVNAdapterFeeLib_Implementation.json +40 -40
  15. package/deployments/ethereum-sandbox-local/DVN.json +76 -76
  16. package/deployments/ethereum-sandbox-local/DVNFeeLib.json +23 -23
  17. package/deployments/ethereum-sandbox-local/DefaultProxyAdmin.json +258 -0
  18. package/deployments/ethereum-sandbox-local/EndpointV2.json +141 -150
  19. package/deployments/ethereum-sandbox-local/EndpointV2View.json +435 -0
  20. package/deployments/ethereum-sandbox-local/EndpointV2View_Implementation.json +313 -0
  21. package/deployments/ethereum-sandbox-local/EndpointV2View_Proxy.json +230 -0
  22. package/deployments/ethereum-sandbox-local/Executor.json +86 -86
  23. package/deployments/ethereum-sandbox-local/ExecutorFeeLib.json +38 -33
  24. package/deployments/ethereum-sandbox-local/ExecutorProxyAdmin.json +17 -17
  25. package/deployments/ethereum-sandbox-local/Executor_Implementation.json +61 -61
  26. package/deployments/ethereum-sandbox-local/Executor_Proxy.json +66 -66
  27. package/deployments/ethereum-sandbox-local/LzExecutor.json +757 -0
  28. package/deployments/ethereum-sandbox-local/LzExecutor_Implementation.json +703 -0
  29. package/deployments/ethereum-sandbox-local/LzExecutor_Proxy.json +244 -0
  30. package/deployments/ethereum-sandbox-local/NonceContractMock.json +6 -6
  31. package/deployments/ethereum-sandbox-local/PriceFeed.json +18 -18
  32. package/deployments/ethereum-sandbox-local/PriceFeedProxyAdmin.json +5 -5
  33. package/deployments/ethereum-sandbox-local/PriceFeed_Implementation.json +44 -44
  34. package/deployments/ethereum-sandbox-local/PriceFeed_Proxy.json +5 -5
  35. package/deployments/ethereum-sandbox-local/ReceiveUln301.json +126 -98
  36. package/deployments/ethereum-sandbox-local/ReceiveUln301View.json +354 -0
  37. package/deployments/ethereum-sandbox-local/ReceiveUln301View_Implementation.json +231 -0
  38. package/deployments/ethereum-sandbox-local/ReceiveUln301View_Proxy.json +230 -0
  39. package/deployments/ethereum-sandbox-local/ReceiveUln302.json +114 -62
  40. package/deployments/ethereum-sandbox-local/ReceiveUln302View.json +478 -0
  41. package/deployments/ethereum-sandbox-local/ReceiveUln302View_Implementation.json +384 -0
  42. package/deployments/ethereum-sandbox-local/ReceiveUln302View_Proxy.json +230 -0
  43. package/deployments/ethereum-sandbox-local/SendUln301.json +112 -112
  44. package/deployments/ethereum-sandbox-local/SendUln302.json +109 -109
  45. package/deployments/ethereum-sandbox-local/SimpleMessageLib.json +23 -23
  46. package/deployments/ethereum-sandbox-local/Treasury.json +21 -21
  47. package/deployments/ethereum-sandbox-local/TreasuryFeeHandler.json +12 -12
  48. package/deployments/polygon-sandbox-local/DVN.json +76 -76
  49. package/deployments/polygon-sandbox-local/DVNFeeLib.json +23 -23
  50. package/deployments/polygon-sandbox-local/DefaultProxyAdmin.json +258 -0
  51. package/deployments/polygon-sandbox-local/EndpointV2.json +141 -150
  52. package/deployments/polygon-sandbox-local/EndpointV2View.json +435 -0
  53. package/deployments/polygon-sandbox-local/EndpointV2View_Implementation.json +313 -0
  54. package/deployments/polygon-sandbox-local/EndpointV2View_Proxy.json +230 -0
  55. package/deployments/polygon-sandbox-local/Executor.json +86 -86
  56. package/deployments/polygon-sandbox-local/ExecutorFeeLib.json +38 -33
  57. package/deployments/polygon-sandbox-local/ExecutorProxyAdmin.json +17 -17
  58. package/deployments/polygon-sandbox-local/Executor_Implementation.json +61 -61
  59. package/deployments/polygon-sandbox-local/Executor_Proxy.json +66 -66
  60. package/deployments/polygon-sandbox-local/LzExecutor.json +757 -0
  61. package/deployments/polygon-sandbox-local/LzExecutor_Implementation.json +703 -0
  62. package/deployments/polygon-sandbox-local/LzExecutor_Proxy.json +244 -0
  63. package/deployments/polygon-sandbox-local/NonceContractMock.json +6 -6
  64. package/deployments/polygon-sandbox-local/PriceFeed.json +18 -18
  65. package/deployments/polygon-sandbox-local/PriceFeedProxyAdmin.json +5 -5
  66. package/deployments/polygon-sandbox-local/PriceFeed_Implementation.json +44 -44
  67. package/deployments/polygon-sandbox-local/PriceFeed_Proxy.json +5 -5
  68. package/deployments/polygon-sandbox-local/ReceiveUln301.json +126 -98
  69. package/deployments/polygon-sandbox-local/ReceiveUln301View.json +354 -0
  70. package/deployments/polygon-sandbox-local/ReceiveUln301View_Implementation.json +231 -0
  71. package/deployments/polygon-sandbox-local/ReceiveUln301View_Proxy.json +230 -0
  72. package/deployments/polygon-sandbox-local/ReceiveUln302.json +114 -62
  73. package/deployments/polygon-sandbox-local/ReceiveUln302View.json +478 -0
  74. package/deployments/polygon-sandbox-local/ReceiveUln302View_Implementation.json +384 -0
  75. package/deployments/polygon-sandbox-local/ReceiveUln302View_Proxy.json +230 -0
  76. package/deployments/polygon-sandbox-local/SendUln301.json +112 -112
  77. package/deployments/polygon-sandbox-local/SendUln302.json +109 -109
  78. package/deployments/polygon-sandbox-local/SimpleMessageLib.json +23 -23
  79. package/deployments/polygon-sandbox-local/Treasury.json +21 -21
  80. package/deployments/polygon-sandbox-local/TreasuryFeeHandler.json +12 -12
  81. package/dist/{index-htDjTX1I.d.mts → index-839VW31F.d.mts} +82 -10
  82. package/dist/{index-htDjTX1I.d.ts → index-839VW31F.d.ts} +82 -10
  83. package/dist/index.browser.cjs +108 -10
  84. package/dist/index.browser.cjs.map +1 -1
  85. package/dist/index.browser.d.mts +1 -1
  86. package/dist/index.browser.d.ts +1 -1
  87. package/dist/index.browser.mjs +108 -10
  88. package/dist/index.browser.mjs.map +1 -1
  89. package/dist/index.cjs +108 -10
  90. package/dist/index.cjs.map +1 -1
  91. package/dist/index.d.mts +1 -1
  92. package/dist/index.d.ts +1 -1
  93. package/dist/index.mjs +108 -10
  94. package/dist/index.mjs.map +1 -1
  95. package/package.json +8 -8
@@ -19,88 +19,88 @@
19
19
  },
20
20
  {
21
21
  "inputs": [],
22
- "name": "AddressSizeAlreadySet",
22
+ "name": "AddressCast_InvalidSizeForAddress",
23
23
  "type": "error"
24
24
  },
25
25
  {
26
26
  "inputs": [],
27
- "name": "AtLeastOneDVN",
27
+ "name": "AddressSizeConfig_AddressSizeAlreadySet",
28
28
  "type": "error"
29
29
  },
30
30
  {
31
31
  "inputs": [],
32
- "name": "InvalidAddressSize",
32
+ "name": "AddressSizeConfig_InvalidAddressSize",
33
33
  "type": "error"
34
34
  },
35
35
  {
36
- "inputs": [
37
- {
38
- "internalType": "uint256",
39
- "name": "configType",
40
- "type": "uint256"
41
- }
42
- ],
43
- "name": "InvalidConfigType",
36
+ "inputs": [],
37
+ "name": "LZ_MessageLib_InvalidExecutor",
44
38
  "type": "error"
45
39
  },
46
40
  {
47
41
  "inputs": [],
48
- "name": "InvalidConfirmations",
42
+ "name": "LZ_MessageLib_OnlyEndpoint",
49
43
  "type": "error"
50
44
  },
51
45
  {
52
46
  "inputs": [],
53
- "name": "InvalidEid",
47
+ "name": "LZ_MessageLib_OnlyExecutor",
54
48
  "type": "error"
55
49
  },
56
50
  {
57
51
  "inputs": [],
58
- "name": "InvalidExecutor",
52
+ "name": "LZ_ULN_AtLeastOneDVN",
59
53
  "type": "error"
60
54
  },
61
55
  {
62
- "inputs": [],
63
- "name": "InvalidOptionalDVNCount",
56
+ "inputs": [
57
+ {
58
+ "internalType": "uint256",
59
+ "name": "configType",
60
+ "type": "uint256"
61
+ }
62
+ ],
63
+ "name": "LZ_ULN_InvalidConfigType",
64
64
  "type": "error"
65
65
  },
66
66
  {
67
67
  "inputs": [],
68
- "name": "InvalidOptionalDVNThreshold",
68
+ "name": "LZ_ULN_InvalidConfirmations",
69
69
  "type": "error"
70
70
  },
71
71
  {
72
72
  "inputs": [],
73
- "name": "InvalidPacketHeader",
73
+ "name": "LZ_ULN_InvalidEid",
74
74
  "type": "error"
75
75
  },
76
76
  {
77
77
  "inputs": [],
78
- "name": "InvalidPacketVersion",
78
+ "name": "LZ_ULN_InvalidOptionalDVNCount",
79
79
  "type": "error"
80
80
  },
81
81
  {
82
82
  "inputs": [],
83
- "name": "InvalidRequiredDVNCount",
83
+ "name": "LZ_ULN_InvalidOptionalDVNThreshold",
84
84
  "type": "error"
85
85
  },
86
86
  {
87
87
  "inputs": [],
88
- "name": "InvalidSizeForAddress",
88
+ "name": "LZ_ULN_InvalidPacketHeader",
89
89
  "type": "error"
90
90
  },
91
91
  {
92
92
  "inputs": [],
93
- "name": "OnlyEndpoint",
93
+ "name": "LZ_ULN_InvalidPacketVersion",
94
94
  "type": "error"
95
95
  },
96
96
  {
97
97
  "inputs": [],
98
- "name": "OnlyExecutor",
98
+ "name": "LZ_ULN_InvalidRequiredDVNCount",
99
99
  "type": "error"
100
100
  },
101
101
  {
102
102
  "inputs": [],
103
- "name": "Unsorted",
103
+ "name": "LZ_ULN_Unsorted",
104
104
  "type": "error"
105
105
  },
106
106
  {
@@ -111,12 +111,12 @@
111
111
  "type": "uint32"
112
112
  }
113
113
  ],
114
- "name": "UnsupportedEid",
114
+ "name": "LZ_ULN_UnsupportedEid",
115
115
  "type": "error"
116
116
  },
117
117
  {
118
118
  "inputs": [],
119
- "name": "Verifying",
119
+ "name": "LZ_ULN_Verifying",
120
120
  "type": "error"
121
121
  },
122
122
  {
@@ -444,6 +444,24 @@
444
444
  "stateMutability": "view",
445
445
  "type": "function"
446
446
  },
447
+ {
448
+ "inputs": [
449
+ {
450
+ "internalType": "bytes",
451
+ "name": "_packetHeader",
452
+ "type": "bytes"
453
+ },
454
+ {
455
+ "internalType": "uint32",
456
+ "name": "_localEid",
457
+ "type": "uint32"
458
+ }
459
+ ],
460
+ "name": "assertHeader",
461
+ "outputs": [],
462
+ "stateMutability": "pure",
463
+ "type": "function"
464
+ },
447
465
  {
448
466
  "inputs": [
449
467
  {
@@ -481,30 +499,6 @@
481
499
  "stateMutability": "view",
482
500
  "type": "function"
483
501
  },
484
- {
485
- "inputs": [
486
- {
487
- "internalType": "bytes",
488
- "name": "_packetHeader",
489
- "type": "bytes"
490
- },
491
- {
492
- "internalType": "bytes32",
493
- "name": "_payloadHash",
494
- "type": "bytes32"
495
- }
496
- ],
497
- "name": "executable",
498
- "outputs": [
499
- {
500
- "internalType": "enum ExecutionState",
501
- "name": "",
502
- "type": "uint8"
503
- }
504
- ],
505
- "stateMutability": "view",
506
- "type": "function"
507
- },
508
502
  {
509
503
  "inputs": [
510
504
  {
@@ -892,9 +886,46 @@
892
886
  {
893
887
  "inputs": [
894
888
  {
895
- "internalType": "bytes",
896
- "name": "_packetHeader",
897
- "type": "bytes"
889
+ "components": [
890
+ {
891
+ "internalType": "uint64",
892
+ "name": "confirmations",
893
+ "type": "uint64"
894
+ },
895
+ {
896
+ "internalType": "uint8",
897
+ "name": "requiredDVNCount",
898
+ "type": "uint8"
899
+ },
900
+ {
901
+ "internalType": "uint8",
902
+ "name": "optionalDVNCount",
903
+ "type": "uint8"
904
+ },
905
+ {
906
+ "internalType": "uint8",
907
+ "name": "optionalDVNThreshold",
908
+ "type": "uint8"
909
+ },
910
+ {
911
+ "internalType": "address[]",
912
+ "name": "requiredDVNs",
913
+ "type": "address[]"
914
+ },
915
+ {
916
+ "internalType": "address[]",
917
+ "name": "optionalDVNs",
918
+ "type": "address[]"
919
+ }
920
+ ],
921
+ "internalType": "struct UlnConfig",
922
+ "name": "_config",
923
+ "type": "tuple"
924
+ },
925
+ {
926
+ "internalType": "bytes32",
927
+ "name": "_headerHash",
928
+ "type": "bytes32"
898
929
  },
899
930
  {
900
931
  "internalType": "bytes32",
@@ -905,9 +936,9 @@
905
936
  "name": "verifiable",
906
937
  "outputs": [
907
938
  {
908
- "internalType": "enum VerificationState",
939
+ "internalType": "bool",
909
940
  "name": "",
910
- "type": "uint8"
941
+ "type": "bool"
911
942
  }
912
943
  ],
913
944
  "stateMutability": "view",
@@ -960,21 +991,21 @@
960
991
  "type": "function"
961
992
  }
962
993
  ],
963
- "transactionHash": "0xf2f64fe75a1527dd3bbc0b0cd81721420bc5478fc67eeeb28d20d5ec92448efb",
994
+ "transactionHash": "0x572f870ff3490e8e425d5fd6e60f3a6a6fb86207cccaa06d201a31b52b70e70b",
964
995
  "receipt": {
965
996
  "to": null,
966
997
  "from": "0x70997970C51812dc3A010C7d01b50e0d17dc79C8",
967
998
  "contractAddress": "0x381445710b5e73d34aF196c53A3D5cDa58EDBf7A",
968
999
  "transactionIndex": 0,
969
- "gasUsed": "2987436",
1000
+ "gasUsed": "2870534",
970
1001
  "logsBloom": "0x00000000000000000002000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000001000000000000000000000000000000000800020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000001000000000000000000000000000000",
971
- "blockHash": "0xbcf8f56492cb2e3a03ce57d05d88cd9c132b9068002665e6572c99e214572137",
972
- "transactionHash": "0xf2f64fe75a1527dd3bbc0b0cd81721420bc5478fc67eeeb28d20d5ec92448efb",
1002
+ "blockHash": "0x5f7ec629f903bbdede6125f17843c42d17720e4a17c0c3ae3d81fc9ca313f594",
1003
+ "transactionHash": "0x572f870ff3490e8e425d5fd6e60f3a6a6fb86207cccaa06d201a31b52b70e70b",
973
1004
  "logs": [
974
1005
  {
975
1006
  "transactionIndex": 0,
976
- "blockNumber": 43,
977
- "transactionHash": "0xf2f64fe75a1527dd3bbc0b0cd81721420bc5478fc67eeeb28d20d5ec92448efb",
1007
+ "blockNumber": 46,
1008
+ "transactionHash": "0x572f870ff3490e8e425d5fd6e60f3a6a6fb86207cccaa06d201a31b52b70e70b",
978
1009
  "address": "0x381445710b5e73d34aF196c53A3D5cDa58EDBf7A",
979
1010
  "topics": [
980
1011
  "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0",
@@ -983,11 +1014,11 @@
983
1014
  ],
984
1015
  "data": "0x",
985
1016
  "logIndex": 0,
986
- "blockHash": "0xbcf8f56492cb2e3a03ce57d05d88cd9c132b9068002665e6572c99e214572137"
1017
+ "blockHash": "0x5f7ec629f903bbdede6125f17843c42d17720e4a17c0c3ae3d81fc9ca313f594"
987
1018
  }
988
1019
  ],
989
- "blockNumber": 43,
990
- "cumulativeGasUsed": "2987436",
1020
+ "blockNumber": 46,
1021
+ "cumulativeGasUsed": "2870534",
991
1022
  "status": 1,
992
1023
  "byzantium": true
993
1024
  },
@@ -996,9 +1027,9 @@
996
1027
  20121
997
1028
  ],
998
1029
  "numDeployments": 1,
999
- "solcInputHash": "9a77f541806fd95ff35b8613e526dae5",
1000
- "bytecode": "0x60c06040523480156200001157600080fd5b506040516200361c3803806200361c8339810160408190526200003491620000b2565b6001600160a01b03821660805263ffffffff811660a0528181620000583362000062565b5050505062000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000c657600080fd5b82516001600160a01b0381168114620000de57600080fd5b602084015190925063ffffffff81168114620000f957600080fd5b809150509250929050565b60805160a0516134dd6200013f60003960008181610e97015261111b015260008181610f9a015281816112bd01526120e101526134dd6000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c806354fd4d50116100cd5780639653a70411610081578063e65106f811610066578063e65106f8146103d2578063f2fde38b146103e5578063f8e1734c146103f857600080fd5b80639653a7041461037e57806398678a111461039157600080fd5b8063715018a6116100b2578063715018a6146103455780637401fccc1461034d5780638da5cb5b1461036057600080fd5b806354fd4d50146103125780636d26e5d01461033257600080fd5b806339e3f938116101245780633c782a52116101095780633c782a521461027a57806343ea4fa9146102df57806352d2871f146102f257600080fd5b806339e3f9381461024757806339e928a81461026757600080fd5b806327d12cd91161015557806327d12cd9146101b957806329460b0b146101d95780632fed39ae146101ec57600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f366004612604565b61040b565b005b6101a6610194366004612677565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101cc6101c7366004612692565b61041d565b6040516101b09190612744565b6101846101e7366004612757565b610454565b6102226101fa366004612677565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61025a6102553660046127ee565b610639565b6040516101b091906128e7565b6101846102753660046128fa565b6107db565b6102bf61028836600461295d565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61025a6102ed3660046127ee565b610936565b6103056103003660046129a8565b610cf0565b6040516101b09190612a55565b6040805160038152600060208201526001918101919091526060016101b0565b610184610340366004612a68565b610da1565b610184610e7a565b6101cc61035b366004612692565b610e8e565b60005473ffffffffffffffffffffffffffffffffffffffff16610222565b61022261038c3660046127ee565b611088565b61022261039f3660046127ee565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103e0366004612692565b611103565b6101846103f3366004612a92565b611204565b610184610406366004612aaf565b6112bb565b610417848484846113bc565b50505050565b60008061042b858585610e8e565b600281111561043c5761043c6126de565b036104495750600061044d565b5060025b9392505050565b61045c6114d0565b60005b818110156105fb573683838381811061047a5761047a612b20565b905060200281019061048c9190612b4f565b905060ff61049d6020830183612b8d565b6104ae906040810190602001612bd2565b60ff16036104e8576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104f76020830183612b8d565b610508906060810190604001612bd2565b60ff1603610542576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105586020830183612b8d565b610566906020810190612bed565b67ffffffffffffffff16036105a7576040517f8f6ae8f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105c56105b76020830183612b8d565b6105c090612dda565b611551565b6105f260006105d76020840184612677565b6105e46020850185612b8d565b6105ed90612dda565b6115a2565b5060010161045f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161062d929190612e98565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561075a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161072f575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156107c957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161079e575b50505050508152505090505b92915050565b6107e36114d0565b60005b81811015610904573683838381811061080157610801612b20565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108349190612a92565b73ffffffffffffffffffffffffffffffffffffffff1603610881576040517f710c949700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108916040820160208301612a92565b600560006108a26020850185612677565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107e6565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb3828260405161062d929190613037565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109e657825467ffffffffffffffff168452610a05565b67ffffffffffffffff81811614610a055767ffffffffffffffff811684525b815468010000000000000000900460ff16610abb57825468010000000000000000900460ff1615610ab65782600101805480602002602001604051908101604052809291908181526020018280548015610a9557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a6a575b50505050506080850152825468010000000000000000900460ff1660208501525b610b59565b815468010000000000000000900460ff90811614610b595781600101805480602002602001604051908101604052809291908181526020018280548015610b3857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b0d575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610c285782546901000000000000000000900460ff1615610c235782600201805480602002602001604051908101604052809291908181526020018280548015610beb57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bc0575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cde565b81546901000000000000000000900460ff90811614610cde5781600201805480602002602001604051908101604052809291908181526020018280548015610ca657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c7b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610ce784611551565b50505092915050565b606060018203610d4157610d08838561ffff16611088565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b604051602081830303815290604052905061044d565b60028203610d6757610d57838561ffff16610936565b604051602001610d2b91906128e7565b6040517f961a995f000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610da96114d0565b6020811115610de4576040517fbcfcf59e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e2f576040517f831ad0ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff748910161062d565b610e826114d0565b610e8c6000611936565b565b6000610ebb84847f00000000000000000000000000000000000000000000000000000000000000006119ab565b6000610ec78585611a7e565b90506000610ee3610ed88787611a90565b63ffffffff16611ab3565b90506000610ef18787611b4b565b61ffff831660009081526003602052604081205491925090610f1d90610f178a8a611b6e565b90611b87565b84604051602001610f2f9291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527ffdc07c70000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fdc07c7090610fd190869085906004016130f4565b602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190613111565b67ffffffffffffffff168267ffffffffffffffff161161103957600294505050505061044d565b61106861104a858561ffff16610936565b898960405161105a92919061312e565b604051809103902088611c28565b1561107a57600194505050505061044d565b506000979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff86168452909152812054909116806110f95763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff166110fb565b805b949350505050565b3660006111108585611d31565b9150915061113f82827f00000000000000000000000000000000000000000000000000000000000000006119ab565b600061114b8686611a7e565b9050600061115c610ed88888611a90565b9050600061116e838361ffff16610936565b905061119b81868660405161118492919061312e565b60405180910390206111968b8b611d4d565b611d77565b6111fa826111a98a8a611b6e565b856111b48c8c611b4b565b6111be8d8d611f26565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611f36915050565b5050505050505050565b61120c6114d0565b73ffffffffffffffffffffffffffffffffffffffff81166112af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d98565b6112b881611936565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113378561ffff166121e9565b6001830361135e5761135961ffff86168561135484860186612a92565b612230565b6113b5565b600283036113805761135961ffff86168561137b8486018661313e565b6122db565b6040517f961a995f00000000000000000000000000000000000000000000000000000000815260048101849052602401610d98565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906113ee908890889061312e565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916114c2918790879086908890613173565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d98565b602081015160ff1615801561156b5750606081015160ff16155b156112b8576040517f7e36c28400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806115bd5750602081015160ff16155b1561160457608081015151156115ff576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611683565b806020015160ff1681608001515114158061163f57506002611628600160ff613227565b6116329190613240565b60ff16816020015160ff16115b15611676576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116838160800151612324565b604081015160ff908116148061169e5750604081015160ff16155b156117245760a081015151156116e0576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161561171f576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb565b806040015160ff168160a001515114158061175f57506002611748600160ff613227565b6117529190613240565b60ff16816040015160ff16115b15611796576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806117b75750806040015160ff16816060015160ff16115b156117ee576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb8160a00151612324565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361191293908501920190612506565b5060a0820151805161192e916002840191602090910190612506565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146119e5576040517f0666bafd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016119f184846123be565b60ff1614611a2b576040517f28fac06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff16611a3c84846123e0565b63ffffffff1614611a79576040517f9a61cd2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600061044d611a8d84846123f0565b90565b6000611aa0600d60098486613289565b611aa9916132b3565b60e01c9392505050565b600061ffff821115611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d98565b5090565b6000611b5b600960018486613289565b611b64916132fb565b60c01c9392505050565b6000611b7e602d600d8486613289565b61044d91613341565b6060811580611b965750602082115b15611bcd576040517f59baef1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff811115611be657611be6612c0a565b6040519080825280601f01601f191660200182016040528015611c10576020820181803683370190505b506008909202610100039290921b6020820152919050565b602083015160009060ff1615611cab5760005b846020015160ff168160ff161015611c9357611c7d85608001518260ff1681518110611c6957611c69612b20565b602002602001015185858860000151612400565b611c8b57600091505061044d565b600101611c3b565b50836040015160ff16600003611cab5750600161044d565b606084015160005b856040015160ff168160ff161015611d2557611cf58660a001518260ff1681518110611ce157611ce1612b20565b602002602001015186868960000151612400565b15611d1d5781611d048161337d565b9250508160ff16600003611d1d5760019250505061044d565b600101611cb3565b50600095945050505050565b366000611d416051828587613289565b915091505b9250929050565b6000611d59838361248f565b604051611d6792919061312e565b6040518091039020905092915050565b611d82838383611c28565b611db8576040517f692c93cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611e705760005b836020015160ff168160ff161015611e6e57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611e1057611e10612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611dc8565b505b604083015160ff1615611a795760005b836040015160ff168160ff161015610417576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611ec857611ec8612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611e80565b366000611d418360718187613289565b611f44848761ffff16611088565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f7fb6be0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003612045578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e273680136878686805190602001206040516120389392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361192e565b61ffff8616600090815260036020526040812054612064908790611b87565b856040516020016120769291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390612120908a9085908a908a9089908b906004016133b8565b600060405180830381600087803b15801561213a57600080fd5b505af115801561214e573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b6121f28161249f565b6112b8576040517f2146a07a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d98565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6122e68284836115a2565b6122f08284610936565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516122ce93929190613426565b6000805b8251811015611a7957600083828151811061234557612345612b20565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116123b4576040517fa228a30b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612328565b60006123cd6001828486613289565b6123d691613461565b60f81c9392505050565b6000611aa06031602d8486613289565b6000611b7e605160318486613289565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff1693830193909352909161248557508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b366000611d418360518187613289565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff1615158061044d5750546a0100000000000000000000900460ff16151592915050565b828054828255906000526020600020908101928215612580579160200282015b8281111561258057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612526565b50611b479291505b80821115611b475760008155600101612588565b60008083601f8401126125ae57600080fd5b50813567ffffffffffffffff8111156125c657600080fd5b602083019150836020828501011115611d4657600080fd5b67ffffffffffffffff811681146112b857600080fd5b80356125ff816125de565b919050565b6000806000806060858703121561261a57600080fd5b843567ffffffffffffffff81111561263157600080fd5b61263d8782880161259c565b909550935050602085013591506040850135612658816125de565b939692955090935050565b803563ffffffff811681146125ff57600080fd5b60006020828403121561268957600080fd5b61044d82612663565b6000806000604084860312156126a757600080fd5b833567ffffffffffffffff8111156126be57600080fd5b6126ca8682870161259c565b909790965060209590950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016127518361270d565b91905290565b6000806020838503121561276a57600080fd5b823567ffffffffffffffff8082111561278257600080fd5b818501915085601f83011261279657600080fd5b8135818111156127a557600080fd5b8660208260051b85010111156127ba57600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112b857600080fd5b6000806040838503121561280157600080fd5b823561280c816127cc565b915061281a60208401612663565b90509250929050565b60008151808452602080850194506020840160005b8381101561286a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612838565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526128c560c0850182612823565b905060a083015184820360a08601526128de8282612823565b95945050505050565b60208152600061044d6020830184612875565b6000806020838503121561290d57600080fd5b823567ffffffffffffffff8082111561292557600080fd5b818501915085601f83011261293957600080fd5b81358181111561294857600080fd5b8660208260061b85010111156127ba57600080fd5b60008060006060848603121561297257600080fd5b8335925060208401359150604084013561298b816127cc565b809150509250925092565b803561ffff811681146125ff57600080fd5b6000806000606084860312156129bd57600080fd5b6129c684612996565b925060208401356129d6816127cc565b929592945050506040919091013590565b60005b83811015612a025781810151838201526020016129ea565b50506000910152565b60008151808452612a238160208601602086016129e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061044d6020830184612a0b565b60008060408385031215612a7b57600080fd5b612a8483612996565b946020939093013593505050565b600060208284031215612aa457600080fd5b81356110f9816127cc565b600080600080600060808688031215612ac757600080fd5b612ad086612996565b94506020860135612ae0816127cc565b935060408601359250606086013567ffffffffffffffff811115612b0357600080fd5b612b0f8882890161259c565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b8357600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b8357600080fd5b803560ff811681146125ff57600080fd5b600060208284031215612be457600080fd5b61044d82612bc1565b600060208284031215612bff57600080fd5b81356110f9816125de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612c5c57612c5c612c0a565b60405290565b600082601f830112612c7357600080fd5b8135602067ffffffffffffffff80831115612c9057612c90612c0a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612cd357612cd3612c0a565b6040529384526020818701810194908101925087851115612cf357600080fd5b6020870191505b84821015612d1c578135612d0d816127cc565b83529183019190830190612cfa565b979650505050505050565b600060c08284031215612d3957600080fd5b612d41612c39565b9050612d4c826125f4565b8152612d5a60208301612bc1565b6020820152612d6b60408301612bc1565b6040820152612d7c60608301612bc1565b6060820152608082013567ffffffffffffffff80821115612d9c57600080fd5b612da885838601612c62565b608084015260a0840135915080821115612dc157600080fd5b50612dce84828501612c62565b60a08301525092915050565b60006107d53683612d27565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e1b57600080fd5b830160208101925035905067ffffffffffffffff811115612e3b57600080fd5b8060051b3603821315611d4657600080fd5b8183526000602080850194508260005b8581101561286a578135612e70816127cc565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612e5d565b60208082528181018390526000906040808401600586901b8501820187855b88811015613029577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612f1957600080fd5b8b0163ffffffff612f2982612663565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612f6057600080fd5b858901889052018035612f72816125de565b67ffffffffffffffff1685880152612f8b818901612bc1565b606060ff80831682890152612fa18a8501612bc1565b92506080818416818a0152612fb7838601612bc1565b935060a09250818416838a0152612fd081860186612de6565b60c08b81015294509150612feb905061010089018483612e4d565b925050612ffa81840184612de6565b93509050838783030160e0880152613013828483612e4d565b978a019796505050928701925050600101612eb7565b509098975050505050505050565b6020808252818101839052600090604080840186845b8781101561309d5763ffffffff61306383612663565b16835284820135613073816127cc565b73ffffffffffffffffffffffffffffffffffffffff1683860152918301919083019060010161304d565b5090979650505050505050565b600083516130bc8184602088016129e7565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff831681526040602082015260006110fb6040830184612a0b565b60006020828403121561312357600080fd5b81516110f9816125de565b8183823760009101908152919050565b60006020828403121561315057600080fd5b813567ffffffffffffffff81111561316757600080fd5b6110fb84828501612d27565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107d5576107d56131f8565b600060ff83168061327a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b6000808585111561329957600080fd5b838611156132a657600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156132f35780818660040360031b1b83161692505b505092915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156132f35760089490940360031b84901b1690921692915050565b803560208310156107d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600060ff821680613390576133906131f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b61ffff8716815260c0602082015260006133d560c0830188612a0b565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526134198185612a0b565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006128de6060830184612875565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156132f35760019490940360031b84901b169092169291505056fea264697066735822122016ab2a1b86b2d496018d630e2accfc9427a51856284c4ab0d6b61e232d3575c664736f6c63430008160033",
1001
- "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c806354fd4d50116100cd5780639653a70411610081578063e65106f811610066578063e65106f8146103d2578063f2fde38b146103e5578063f8e1734c146103f857600080fd5b80639653a7041461037e57806398678a111461039157600080fd5b8063715018a6116100b2578063715018a6146103455780637401fccc1461034d5780638da5cb5b1461036057600080fd5b806354fd4d50146103125780636d26e5d01461033257600080fd5b806339e3f938116101245780633c782a52116101095780633c782a521461027a57806343ea4fa9146102df57806352d2871f146102f257600080fd5b806339e3f9381461024757806339e928a81461026757600080fd5b806327d12cd91161015557806327d12cd9146101b957806329460b0b146101d95780632fed39ae146101ec57600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f366004612604565b61040b565b005b6101a6610194366004612677565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101cc6101c7366004612692565b61041d565b6040516101b09190612744565b6101846101e7366004612757565b610454565b6102226101fa366004612677565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61025a6102553660046127ee565b610639565b6040516101b091906128e7565b6101846102753660046128fa565b6107db565b6102bf61028836600461295d565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61025a6102ed3660046127ee565b610936565b6103056103003660046129a8565b610cf0565b6040516101b09190612a55565b6040805160038152600060208201526001918101919091526060016101b0565b610184610340366004612a68565b610da1565b610184610e7a565b6101cc61035b366004612692565b610e8e565b60005473ffffffffffffffffffffffffffffffffffffffff16610222565b61022261038c3660046127ee565b611088565b61022261039f3660046127ee565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103e0366004612692565b611103565b6101846103f3366004612a92565b611204565b610184610406366004612aaf565b6112bb565b610417848484846113bc565b50505050565b60008061042b858585610e8e565b600281111561043c5761043c6126de565b036104495750600061044d565b5060025b9392505050565b61045c6114d0565b60005b818110156105fb573683838381811061047a5761047a612b20565b905060200281019061048c9190612b4f565b905060ff61049d6020830183612b8d565b6104ae906040810190602001612bd2565b60ff16036104e8576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104f76020830183612b8d565b610508906060810190604001612bd2565b60ff1603610542576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105586020830183612b8d565b610566906020810190612bed565b67ffffffffffffffff16036105a7576040517f8f6ae8f800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105c56105b76020830183612b8d565b6105c090612dda565b611551565b6105f260006105d76020840184612677565b6105e46020850185612b8d565b6105ed90612dda565b6115a2565b5060010161045f565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b560828260405161062d929190612e98565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561075a57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161072f575b50505050508152602001600282018054806020026020016040519081016040528092919081815260200182805480156107c957602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161079e575b50505050508152505090505b92915050565b6107e36114d0565b60005b81811015610904573683838381811061080157610801612b20565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108349190612a92565b73ffffffffffffffffffffffffffffffffffffffff1603610881576040517f710c949700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6108916040820160208301612a92565b600560006108a26020850185612677565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107e6565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb3828260405161062d929190613037565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109e657825467ffffffffffffffff168452610a05565b67ffffffffffffffff81811614610a055767ffffffffffffffff811684525b815468010000000000000000900460ff16610abb57825468010000000000000000900460ff1615610ab65782600101805480602002602001604051908101604052809291908181526020018280548015610a9557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a6a575b50505050506080850152825468010000000000000000900460ff1660208501525b610b59565b815468010000000000000000900460ff90811614610b595781600101805480602002602001604051908101604052809291908181526020018280548015610b3857602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b0d575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610c285782546901000000000000000000900460ff1615610c235782600201805480602002602001604051908101604052809291908181526020018280548015610beb57602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610bc0575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cde565b81546901000000000000000000900460ff90811614610cde5781600201805480602002602001604051908101604052809291908181526020018280548015610ca657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c7b575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610ce784611551565b50505092915050565b606060018203610d4157610d08838561ffff16611088565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b604051602081830303815290604052905061044d565b60028203610d6757610d57838561ffff16610936565b604051602001610d2b91906128e7565b6040517f961a995f000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b610da96114d0565b6020811115610de4576040517fbcfcf59e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e2f576040517f831ad0ad00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff748910161062d565b610e826114d0565b610e8c6000611936565b565b6000610ebb84847f00000000000000000000000000000000000000000000000000000000000000006119ab565b6000610ec78585611a7e565b90506000610ee3610ed88787611a90565b63ffffffff16611ab3565b90506000610ef18787611b4b565b61ffff831660009081526003602052604081205491925090610f1d90610f178a8a611b6e565b90611b87565b84604051602001610f2f9291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527ffdc07c70000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063fdc07c7090610fd190869085906004016130f4565b602060405180830381865afa158015610fee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110129190613111565b67ffffffffffffffff168267ffffffffffffffff161161103957600294505050505061044d565b61106861104a858561ffff16610936565b898960405161105a92919061312e565b604051809103902088611c28565b1561107a57600194505050505061044d565b506000979650505050505050565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff86168452909152812054909116806110f95763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff166110fb565b805b949350505050565b3660006111108585611d31565b9150915061113f82827f00000000000000000000000000000000000000000000000000000000000000006119ab565b600061114b8686611a7e565b9050600061115c610ed88888611a90565b9050600061116e838361ffff16610936565b905061119b81868660405161118492919061312e565b60405180910390206111968b8b611d4d565b611d77565b6111fa826111a98a8a611b6e565b856111b48c8c611b4b565b6111be8d8d611f26565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611f36915050565b5050505050505050565b61120c6114d0565b73ffffffffffffffffffffffffffffffffffffffff81166112af576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d98565b6112b881611936565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461132a576040517f7eb966c800000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6113378561ffff166121e9565b6001830361135e5761135961ffff86168561135484860186612a92565b612230565b6113b5565b600283036113805761135961ffff86168561137b8486018661313e565b6122db565b6040517f961a995f00000000000000000000000000000000000000000000000000000000815260048101849052602401610d98565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906113ee908890889061312e565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916114c2918790879086908890613173565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e8c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d98565b602081015160ff1615801561156b5750606081015160ff16155b156112b8576040517f7e36c28400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806115bd5750602081015160ff16155b1561160457608081015151156115ff576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611683565b806020015160ff1681608001515114158061163f57506002611628600160ff613227565b6116329190613240565b60ff16816020015160ff16115b15611676576040517f1b66804100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6116838160800151612324565b604081015160ff908116148061169e5750604081015160ff16155b156117245760a081015151156116e0576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff161561171f576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb565b806040015160ff168160a001515114158061175f57506002611748600160ff613227565b6117529190613240565b60ff16816040015160ff16115b15611796576040517f05f7ab6200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806117b75750806040015160ff16816060015160ff16115b156117ee576040517f81da67ee00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6117fb8160a00151612324565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361191293908501920190612506565b5060a0820151805161192e916002840191602090910190612506565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146119e5576040517f0666bafd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016119f184846123be565b60ff1614611a2b576040517f28fac06600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff16611a3c84846123e0565b63ffffffff1614611a79576040517f9a61cd2600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600061044d611a8d84846123f0565b90565b6000611aa0600d60098486613289565b611aa9916132b3565b60e01c9392505050565b600061ffff821115611b47576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d98565b5090565b6000611b5b600960018486613289565b611b64916132fb565b60c01c9392505050565b6000611b7e602d600d8486613289565b61044d91613341565b6060811580611b965750602082115b15611bcd576040517f59baef1d00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff811115611be657611be6612c0a565b6040519080825280601f01601f191660200182016040528015611c10576020820181803683370190505b506008909202610100039290921b6020820152919050565b602083015160009060ff1615611cab5760005b846020015160ff168160ff161015611c9357611c7d85608001518260ff1681518110611c6957611c69612b20565b602002602001015185858860000151612400565b611c8b57600091505061044d565b600101611c3b565b50836040015160ff16600003611cab5750600161044d565b606084015160005b856040015160ff168160ff161015611d2557611cf58660a001518260ff1681518110611ce157611ce1612b20565b602002602001015186868960000151612400565b15611d1d5781611d048161337d565b9250508160ff16600003611d1d5760019250505061044d565b600101611cb3565b50600095945050505050565b366000611d416051828587613289565b915091505b9250929050565b6000611d59838361248f565b604051611d6792919061312e565b6040518091039020905092915050565b611d82838383611c28565b611db8576040517f692c93cb00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611e705760005b836020015160ff168160ff161015611e6e57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611e1057611e10612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611dc8565b505b604083015160ff1615611a795760005b836040015160ff168160ff161015610417576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611ec857611ec8612b20565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611e80565b366000611d418360718187613289565b611f44848761ffff16611088565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611fa8576040517f7fb6be0200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003612045578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e273680136878686805190602001206040516120389392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361192e565b61ffff8616600090815260036020526040812054612064908790611b87565b856040516020016120769291906130aa565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390612120908a9085908a908a9089908b906004016133b8565b600060405180830381600087803b15801561213a57600080fd5b505af115801561214e573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b6121f28161249f565b6112b8576040517f2146a07a00000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d98565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6122e68284836115a2565b6122f08284610936565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f50818284836040516122ce93929190613426565b6000805b8251811015611a7957600083828151811061234557612345612b20565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16116123b4576040517fa228a30b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612328565b60006123cd6001828486613289565b6123d691613461565b60f81c9392505050565b6000611aa06031602d8486613289565b6000611b7e605160318486613289565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff1693830193909352909161248557508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b366000611d418360518187613289565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff1615158061044d5750546a0100000000000000000000900460ff16151592915050565b828054828255906000526020600020908101928215612580579160200282015b8281111561258057825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612526565b50611b479291505b80821115611b475760008155600101612588565b60008083601f8401126125ae57600080fd5b50813567ffffffffffffffff8111156125c657600080fd5b602083019150836020828501011115611d4657600080fd5b67ffffffffffffffff811681146112b857600080fd5b80356125ff816125de565b919050565b6000806000806060858703121561261a57600080fd5b843567ffffffffffffffff81111561263157600080fd5b61263d8782880161259c565b909550935050602085013591506040850135612658816125de565b939692955090935050565b803563ffffffff811681146125ff57600080fd5b60006020828403121561268957600080fd5b61044d82612663565b6000806000604084860312156126a757600080fd5b833567ffffffffffffffff8111156126be57600080fd5b6126ca8682870161259c565b909790965060209590950135949350505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b600381106112b8577f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b602081016127518361270d565b91905290565b6000806020838503121561276a57600080fd5b823567ffffffffffffffff8082111561278257600080fd5b818501915085601f83011261279657600080fd5b8135818111156127a557600080fd5b8660208260051b85010111156127ba57600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146112b857600080fd5b6000806040838503121561280157600080fd5b823561280c816127cc565b915061281a60208401612663565b90509250929050565b60008151808452602080850194506020840160005b8381101561286a57815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612838565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526128c560c0850182612823565b905060a083015184820360a08601526128de8282612823565b95945050505050565b60208152600061044d6020830184612875565b6000806020838503121561290d57600080fd5b823567ffffffffffffffff8082111561292557600080fd5b818501915085601f83011261293957600080fd5b81358181111561294857600080fd5b8660208260061b85010111156127ba57600080fd5b60008060006060848603121561297257600080fd5b8335925060208401359150604084013561298b816127cc565b809150509250925092565b803561ffff811681146125ff57600080fd5b6000806000606084860312156129bd57600080fd5b6129c684612996565b925060208401356129d6816127cc565b929592945050506040919091013590565b60005b83811015612a025781810151838201526020016129ea565b50506000910152565b60008151808452612a238160208601602086016129e7565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b60208152600061044d6020830184612a0b565b60008060408385031215612a7b57600080fd5b612a8483612996565b946020939093013593505050565b600060208284031215612aa457600080fd5b81356110f9816127cc565b600080600080600060808688031215612ac757600080fd5b612ad086612996565b94506020860135612ae0816127cc565b935060408601359250606086013567ffffffffffffffff811115612b0357600080fd5b612b0f8882890161259c565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b8357600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b8357600080fd5b803560ff811681146125ff57600080fd5b600060208284031215612be457600080fd5b61044d82612bc1565b600060208284031215612bff57600080fd5b81356110f9816125de565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff81118282101715612c5c57612c5c612c0a565b60405290565b600082601f830112612c7357600080fd5b8135602067ffffffffffffffff80831115612c9057612c90612c0a565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f83011681018181108482111715612cd357612cd3612c0a565b6040529384526020818701810194908101925087851115612cf357600080fd5b6020870191505b84821015612d1c578135612d0d816127cc565b83529183019190830190612cfa565b979650505050505050565b600060c08284031215612d3957600080fd5b612d41612c39565b9050612d4c826125f4565b8152612d5a60208301612bc1565b6020820152612d6b60408301612bc1565b6040820152612d7c60608301612bc1565b6060820152608082013567ffffffffffffffff80821115612d9c57600080fd5b612da885838601612c62565b608084015260a0840135915080821115612dc157600080fd5b50612dce84828501612c62565b60a08301525092915050565b60006107d53683612d27565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612e1b57600080fd5b830160208101925035905067ffffffffffffffff811115612e3b57600080fd5b8060051b3603821315611d4657600080fd5b8183526000602080850194508260005b8581101561286a578135612e70816127cc565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612e5d565b60208082528181018390526000906040808401600586901b8501820187855b88811015613029577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612f1957600080fd5b8b0163ffffffff612f2982612663565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612f6057600080fd5b858901889052018035612f72816125de565b67ffffffffffffffff1685880152612f8b818901612bc1565b606060ff80831682890152612fa18a8501612bc1565b92506080818416818a0152612fb7838601612bc1565b935060a09250818416838a0152612fd081860186612de6565b60c08b81015294509150612feb905061010089018483612e4d565b925050612ffa81840184612de6565b93509050838783030160e0880152613013828483612e4d565b978a019796505050928701925050600101612eb7565b509098975050505050505050565b6020808252818101839052600090604080840186845b8781101561309d5763ffffffff61306383612663565b16835284820135613073816127cc565b73ffffffffffffffffffffffffffffffffffffffff1683860152918301919083019060010161304d565b5090979650505050505050565b600083516130bc8184602088016129e7565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff831681526040602082015260006110fb6040830184612a0b565b60006020828403121561312357600080fd5b81516110f9816125de565b8183823760009101908152919050565b60006020828403121561315057600080fd5b813567ffffffffffffffff81111561316757600080fd5b6110fb84828501612d27565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107d5576107d56131f8565b600060ff83168061327a577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b6000808585111561329957600080fd5b838611156132a657600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156132f35780818660040360031b1b83161692505b505092915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156132f35760089490940360031b84901b1690921692915050565b803560208310156107d5577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b600060ff821680613390576133906131f8565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b61ffff8716815260c0602082015260006133d560c0830188612a0b565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526134198185612a0b565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff831660208201526060604082015260006128de6060830184612875565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156132f35760019490940360031b84901b169092169291505056fea264697066735822122016ab2a1b86b2d496018d630e2accfc9427a51856284c4ab0d6b61e232d3575c664736f6c63430008160033",
1030
+ "solcInputHash": "206c0dde26401fe2fb94e875b1b843ad",
1031
+ "bytecode": "0x60c06040523480156200001157600080fd5b50604051620033ea380380620033ea8339810160408190526200003491620000b2565b6001600160a01b03821660805263ffffffff811660a0528181620000583362000062565b5050505062000104565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60008060408385031215620000c657600080fd5b82516001600160a01b0381168114620000de57600080fd5b602084015190925063ffffffff81168114620000f957600080fd5b809150509250929050565b60805160a0516132b9620001316000396000610f110152600081816110be0152611e3c01526132b96000f3fe608060405234801561001057600080fd5b506004361061016c5760003560e01c80636d26e5d0116100cd578063c40ff83511610081578063e65106f811610066578063e65106f8146103d5578063f2fde38b146103e8578063f8e1734c146103fb57600080fd5b8063c40ff8351461039f578063e084d952146103b257600080fd5b80638da5cb5b116100b25780638da5cb5b1461032d5780639653a7041461034b57806398678a111461035e57600080fd5b80636d26e5d014610312578063715018a61461032557600080fd5b806339e928a81161012457806343ea4fa91161010957806343ea4fa9146102bf57806352d2871f146102d257806354fd4d50146102f257600080fd5b806339e928a8146102475780633c782a521461025a57600080fd5b806329460b0b1161015557806329460b0b146101b95780632fed39ae146101cc57806339e3f9381461022757600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f3660046123f7565b61040e565b005b6101a6610194366004612468565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101846101c7366004612483565b610420565b6102026101da366004612468565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61023a61023536600461251a565b610605565b6040516101b09190612613565b610184610255366004612626565b6107a7565b61029f610268366004612689565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61023a6102cd36600461251a565b610902565b6102e56102e03660046126d4565b610cbc565b6040516101b09190612781565b6040805160038152600060208201526001918101919091526060016101b0565b610184610320366004612794565b610d74565b610184610e4d565b60005473ffffffffffffffffffffffffffffffffffffffff16610202565b61020261035936600461251a565b610e61565b61020261036c36600461251a565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103ad3660046127be565b610edc565b6103c56103c03660046129f3565b610eec565b60405190151581526020016101b0565b6101846103e3366004612a41565b610ef9565b6101846103f6366004612a8d565b611005565b610184610409366004612aaa565b6110bc565b61041a848484846111bd565b50505050565b6104286112d1565b60005b818110156105c7573683838381811061044657610446612b1b565b90506020028101906104589190612b4a565b905060ff6104696020830183612b88565b61047a906040810190602001612bbc565b60ff16036104b4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104c36020830183612b88565b6104d4906060810190604001612bbc565b60ff160361050e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105246020830183612b88565b610532906020810190612bd7565b67ffffffffffffffff1603610573576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105916105836020830183612b88565b61058c90612bf2565b611352565b6105be60006105a36020840184612468565b6105b06020850185612b88565b6105b990612bf2565b6113a3565b5060010161042b565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b56082826040516105f9929190612cb0565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561072657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106fb575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561079557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161076a575b50505050508152505090505b92915050565b6107af6112d1565b60005b818110156108d057368383838181106107cd576107cd612b1b565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108009190612a8d565b73ffffffffffffffffffffffffffffffffffffffff160361084d576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085d6040820160208301612a8d565b6005600061086e6020850185612468565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107b2565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb382826040516105f9929190612e4d565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109b257825467ffffffffffffffff1684526109d1565b67ffffffffffffffff818116146109d15767ffffffffffffffff811684525b815468010000000000000000900460ff16610a8757825468010000000000000000900460ff1615610a825782600101805480602002602001604051908101604052809291908181526020018280548015610a6157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a36575b50505050506080850152825468010000000000000000900460ff1660208501525b610b25565b815468010000000000000000900460ff90811614610b255781600101805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ad9575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610bf45782546901000000000000000000900460ff1615610bef5782600201805480602002602001604051908101604052809291908181526020018280548015610bb757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b8c575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610caa565b81546901000000000000000000900460ff90811614610caa5781600201805480602002602001604051908101604052809291908181526020018280548015610c7257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c47575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cb384611352565b50505092915050565b606060018203610d0d57610cd4838561ffff16610e61565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b6040516020818303038152906040529050610d6d565b60028203610d3357610d23838561ffff16610902565b604051602001610cf79190612613565b6040517f0c509b5b000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b9392505050565b610d7c6112d1565b6020811115610db7576040517f6f85e1b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e02576040517fe4df7bef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff74891016105f9565b610e556112d1565b610e5f6000611737565b565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff8616845290915281205490911680610ed25763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ed4565b805b949350505050565b610ee78383836117ac565b505050565b6000610ed484848461187a565b366000610f068585611983565b91509150610f3582827f00000000000000000000000000000000000000000000000000000000000000006117ac565b6000610f41868661199f565b90506000610f5d610f5288886119b1565b63ffffffff166119d4565b90506000610f6f838361ffff16610902565b9050610f9c818686604051610f85929190612ec0565b6040518091039020610f978b8b611a6c565b611a96565b610ffb82610faa8a8a611c45565b85610fb58c8c611c5e565b610fbf8d8d611c81565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611c91915050565b5050505050505050565b61100d6112d1565b73ffffffffffffffffffffffffffffffffffffffff81166110b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d64565b6110b981611737565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461112b576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111388561ffff16611f44565b6001830361115f5761115a61ffff86168561115584860186612a8d565b611f8b565b6111b6565b600283036111815761115a61ffff86168561117c84860186612ed0565b612036565b6040517f0c509b5b00000000000000000000000000000000000000000000000000000000815260048101849052602401610d64565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906111ef9088908890612ec0565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916112c3918790879086908890612f05565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d64565b602081015160ff1615801561136c5750606081015160ff16155b156110b9576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806113be5750602081015160ff16155b156114055760808101515115611400576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484565b806020015160ff1681608001515114158061144057506002611429600160ff612fb9565b6114339190612fd2565b60ff16816020015160ff16115b15611477576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484816080015161207f565b604081015160ff908116148061149f5750604081015160ff16155b156115255760a081015151156114e1576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611520576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc565b806040015160ff168160a001515114158061156057506002611549600160ff612fb9565b6115539190612fd2565b60ff16816040015160ff16115b15611597576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806115b85750806040015160ff16816060015160ff16115b156115ef576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc8160a0015161207f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361171393908501920190612302565b5060a0820151805161172f916002840191602090910190612302565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146117e6576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016117f28484612119565b60ff161461182c576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff1661183d848461213b565b63ffffffff1614610ee7576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160009060ff16156118fd5760005b846020015160ff168160ff1610156118e5576118cf85608001518260ff16815181106118bb576118bb612b1b565b60200260200101518585886000015161214b565b6118dd576000915050610d6d565b60010161188d565b50836040015160ff166000036118fd57506001610d6d565b606084015160005b856040015160ff168160ff161015611977576119478660a001518260ff168151811061193357611933612b1b565b60200260200101518686896000015161214b565b1561196f57816119568161301b565b9250508160ff1660000361196f57600192505050610d6d565b600101611905565b50600095945050505050565b3660006119936051828587613056565b915091505b9250929050565b6000610d6d6119ae84846121da565b90565b60006119c1600d60098486613056565b6119ca91613080565b60e01c9392505050565b600061ffff821115611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d64565b5090565b6000611a7883836121ea565b604051611a86929190612ec0565b6040518091039020905092915050565b611aa183838361187a565b611ad7576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611b8f5760005b836020015160ff168160ff161015611b8d57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611b2f57611b2f612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611ae7565b505b604083015160ff1615610ee75760005b836040015160ff168160ff16101561041a576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611be757611be7612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611b9f565b6000611c55602d600d8486613056565b610d6d916130c8565b6000611c6e600960018486613056565b611c7791613104565b60c01c9392505050565b3660006119938360718187613056565b611c9f848761ffff16610e61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517fb7386d3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003611da0578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e27368013687868680519060200120604051611d939392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361172f565b61ffff8616600090815260036020526040812054611dbf9087906121fa565b85604051602001611dd192919061314a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390611e7b908a9085908a908a9089908b90600401613194565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b611f4d8161229b565b6110b9576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d64565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6120418284836113a3565b61204b8284610902565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161202993929190613202565b6000805b8251811015610ee75760008382815181106120a0576120a0612b1b565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161161210f576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612083565b60006121286001828486613056565b6121319161323d565b60f81c9392505050565b60006119c16031602d8486613056565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff169383019390935290916121d057508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b6000611c55605160318486613056565b3660006119938360518187613056565b60608115806122095750602082115b15612240576040517f18456c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff81111561225957612259612812565b6040519080825280601f01601f191660200182016040528015612283576020820181803683370190505b506008909202610100039290921b6020820152919050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610d6d5750546a0100000000000000000000900460ff16151592915050565b82805482825590600052602060002090810192821561237c579160200282015b8281111561237c57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612322565b50611a689291505b80821115611a685760008155600101612384565b60008083601f8401126123aa57600080fd5b50813567ffffffffffffffff8111156123c257600080fd5b60208301915083602082850101111561199857600080fd5b803567ffffffffffffffff811681146123f257600080fd5b919050565b6000806000806060858703121561240d57600080fd5b843567ffffffffffffffff81111561242457600080fd5b61243087828801612398565b90955093505060208501359150612449604086016123da565b905092959194509250565b803563ffffffff811681146123f257600080fd5b60006020828403121561247a57600080fd5b610d6d82612454565b6000806020838503121561249657600080fd5b823567ffffffffffffffff808211156124ae57600080fd5b818501915085601f8301126124c257600080fd5b8135818111156124d157600080fd5b8660208260051b85010111156124e657600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146110b957600080fd5b6000806040838503121561252d57600080fd5b8235612538816124f8565b915061254660208401612454565b90509250929050565b60008151808452602080850194506020840160005b8381101561259657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612564565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526125f160c085018261254f565b905060a083015184820360a086015261260a828261254f565b95945050505050565b602081526000610d6d60208301846125a1565b6000806020838503121561263957600080fd5b823567ffffffffffffffff8082111561265157600080fd5b818501915085601f83011261266557600080fd5b81358181111561267457600080fd5b8660208260061b85010111156124e657600080fd5b60008060006060848603121561269e57600080fd5b833592506020840135915060408401356126b7816124f8565b809150509250925092565b803561ffff811681146123f257600080fd5b6000806000606084860312156126e957600080fd5b6126f2846126c2565b92506020840135612702816124f8565b929592945050506040919091013590565b60005b8381101561272e578181015183820152602001612716565b50506000910152565b6000815180845261274f816020860160208601612713565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d6d6020830184612737565b600080604083850312156127a757600080fd5b6127b0836126c2565b946020939093013593505050565b6000806000604084860312156127d357600080fd5b833567ffffffffffffffff8111156127ea57600080fd5b6127f686828701612398565b9094509250612809905060208501612454565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561286457612864612812565b60405290565b803560ff811681146123f257600080fd5b600082601f83011261288c57600080fd5b8135602067ffffffffffffffff808311156128a9576128a9612812565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156128ec576128ec612812565b604052938452602081870181019490810192508785111561290c57600080fd5b6020870191505b84821015612935578135612926816124f8565b83529183019190830190612913565b979650505050505050565b600060c0828403121561295257600080fd5b61295a612841565b9050612965826123da565b81526129736020830161286a565b60208201526129846040830161286a565b60408201526129956060830161286a565b6060820152608082013567ffffffffffffffff808211156129b557600080fd5b6129c18583860161287b565b608084015260a08401359150808211156129da57600080fd5b506129e78482850161287b565b60a08301525092915050565b600080600060608486031215612a0857600080fd5b833567ffffffffffffffff811115612a1f57600080fd5b612a2b86828701612940565b9660208601359650604090950135949350505050565b600080600060408486031215612a5657600080fd5b833567ffffffffffffffff811115612a6d57600080fd5b612a7986828701612398565b909790965060209590950135949350505050565b600060208284031215612a9f57600080fd5b8135610ed2816124f8565b600080600080600060808688031215612ac257600080fd5b612acb866126c2565b94506020860135612adb816124f8565b935060408601359250606086013567ffffffffffffffff811115612afe57600080fd5b612b0a88828901612398565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b7e57600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b7e57600080fd5b600060208284031215612bce57600080fd5b610d6d8261286a565b600060208284031215612be957600080fd5b610d6d826123da565b60006107a13683612940565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c3357600080fd5b830160208101925035905067ffffffffffffffff811115612c5357600080fd5b8060051b360382131561199857600080fd5b8183526000602080850194508260005b85811015612596578135612c88816124f8565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612c75565b60208082528181018390526000906040808401600586901b8501820187855b88811015612e3f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612d3157600080fd5b8b0163ffffffff612d4182612454565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612d7857600080fd5b8589018890520167ffffffffffffffff612d91826123da565b1687860152612da188820161286a565b606060ff80831682890152612db78a850161286a565b92506080818416818a0152612dcd83860161286a565b935060a09250818416838a0152612de681860186612bfe565b60c08b81015294509150612e01905061010089018483612c65565b925050612e1081840184612bfe565b93509050838783030160e0880152612e29828483612c65565b978a019796505050928701925050600101612ccf565b509098975050505050505050565b6020808252818101839052600090604080840186845b87811015612eb35763ffffffff612e7983612454565b16835284820135612e89816124f8565b73ffffffffffffffffffffffffffffffffffffffff16838601529183019190830190600101612e63565b5090979650505050505050565b8183823760009101908152919050565b600060208284031215612ee257600080fd5b813567ffffffffffffffff811115612ef957600080fd5b610ed484828501612940565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107a1576107a1612f8a565b600060ff83168061300c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061302e5761302e612f8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b6000808585111561306657600080fd5b8386111561307357600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130c05780818660040360031b1b83161692505b505092915050565b803560208310156107a1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156130c05760089490940360031b84901b1690921692915050565b6000835161315c818460208801612713565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff8716815260c0602082015260006131b160c0830188612737565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526131f58185612737565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061260a60608301846125a1565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156130c05760019490940360031b84901b169092169291505056fea2646970667358221220da1239d4ad10b7e9dd1d6b1a3f8c2b3e73f9ad36ba2a18f553a8a9d0044b8f5a64736f6c63430008160033",
1032
+ "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061016c5760003560e01c80636d26e5d0116100cd578063c40ff83511610081578063e65106f811610066578063e65106f8146103d5578063f2fde38b146103e8578063f8e1734c146103fb57600080fd5b8063c40ff8351461039f578063e084d952146103b257600080fd5b80638da5cb5b116100b25780638da5cb5b1461032d5780639653a7041461034b57806398678a111461035e57600080fd5b80636d26e5d014610312578063715018a61461032557600080fd5b806339e928a81161012457806343ea4fa91161010957806343ea4fa9146102bf57806352d2871f146102d257806354fd4d50146102f257600080fd5b806339e928a8146102475780633c782a521461025a57600080fd5b806329460b0b1161015557806329460b0b146101b95780632fed39ae146101cc57806339e3f9381461022757600080fd5b80630223536e146101715780630f8355c014610186575b600080fd5b61018461017f3660046123f7565b61040e565b005b6101a6610194366004612468565b60036020526000908152604090205481565b6040519081526020015b60405180910390f35b6101846101c7366004612483565b610420565b6102026101da366004612468565b60056020526000908152604090205473ffffffffffffffffffffffffffffffffffffffff1681565b60405173ffffffffffffffffffffffffffffffffffffffff90911681526020016101b0565b61023a61023536600461251a565b610605565b6040516101b09190612613565b610184610255366004612626565b6107a7565b61029f610268366004612689565b600260209081526000938452604080852082529284528284209052825290205460ff811690610100900467ffffffffffffffff1682565b60408051921515835267ffffffffffffffff9091166020830152016101b0565b61023a6102cd36600461251a565b610902565b6102e56102e03660046126d4565b610cbc565b6040516101b09190612781565b6040805160038152600060208201526001918101919091526060016101b0565b610184610320366004612794565b610d74565b610184610e4d565b60005473ffffffffffffffffffffffffffffffffffffffff16610202565b61020261035936600461251a565b610e61565b61020261036c36600461251a565b600460209081526000928352604080842090915290825290205473ffffffffffffffffffffffffffffffffffffffff1681565b6101846103ad3660046127be565b610edc565b6103c56103c03660046129f3565b610eec565b60405190151581526020016101b0565b6101846103e3366004612a41565b610ef9565b6101846103f6366004612a8d565b611005565b610184610409366004612aaa565b6110bc565b61041a848484846111bd565b50505050565b6104286112d1565b60005b818110156105c7573683838381811061044657610446612b1b565b90506020028101906104589190612b4a565b905060ff6104696020830183612b88565b61047a906040810190602001612bbc565b60ff16036104b4576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60ff6104c36020830183612b88565b6104d4906060810190604001612bbc565b60ff160361050e576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b67ffffffffffffffff6105246020830183612b88565b610532906020810190612bd7565b67ffffffffffffffff1603610573576040517f503667ae00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6105916105836020830183612b88565b61058c90612bf2565b611352565b6105be60006105a36020840184612468565b6105b06020850185612b88565b6105b990612bf2565b6113a3565b5060010161042b565b507faaf3aaa0c11056e86ac56eb653e25b005ca1a7d4dcd21ba24647f7ab63f3b56082826040516105f9929190612cb0565b60405180910390a15050565b6040805160c0810182526000808252602082018190529181018290526060808201929092526080810182905260a081019190915273ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020835160c081018552815467ffffffffffffffff8116825260ff680100000000000000008204811683860152690100000000000000000082048116838801526a0100000000000000000000909104166060820152928101805485518185028101850190965280865293949193608086019383018282801561072657602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff1681526001909101906020018083116106fb575b505050505081526020016002820180548060200260200160405190810160405280929190818152602001828054801561079557602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff16815260019091019060200180831161076a575b50505050508152505090505b92915050565b6107af6112d1565b60005b818110156108d057368383838181106107cd576107cd612b1b565b9050604002019050600073ffffffffffffffffffffffffffffffffffffffff168160200160208101906108009190612a8d565b73ffffffffffffffffffffffffffffffffffffffff160361084d576040517f20e9d05a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61085d6040820160208301612a8d565b6005600061086e6020850185612468565b63ffffffff168152602081019190915260400160002080547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff92909216919091179055506001016107b2565b507f2a2676897ce6724d11fb8016f9bcdfe9fe564bc3524411d5df7914aac78aeeb382826040516105f9929190612e4d565b6040805160c0810182526000808252602080830182905282840182905260608084018390526080840181905260a084015263ffffffff85168083527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb49825284832073ffffffffffffffffffffffffffffffffffffffff88168452600183528584209184529152929020805491929167ffffffffffffffff16806109b257825467ffffffffffffffff1684526109d1565b67ffffffffffffffff818116146109d15767ffffffffffffffff811684525b815468010000000000000000900460ff16610a8757825468010000000000000000900460ff1615610a825782600101805480602002602001604051908101604052809291908181526020018280548015610a6157602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610a36575b50505050506080850152825468010000000000000000900460ff1660208501525b610b25565b815468010000000000000000900460ff90811614610b255781600101805480602002602001604051908101604052809291908181526020018280548015610b0457602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610ad9575b50505050506080850152815468010000000000000000900460ff1660208501525b81546901000000000000000000900460ff16610bf45782546901000000000000000000900460ff1615610bef5782600201805480602002602001604051908101604052809291908181526020018280548015610bb757602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610b8c575b505050505060a0850152825460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610caa565b81546901000000000000000000900460ff90811614610caa5781600201805480602002602001604051908101604052809291908181526020018280548015610c7257602002820191906000526020600020905b815473ffffffffffffffffffffffffffffffffffffffff168152600190910190602001808311610c47575b505050505060a0850152815460ff69010000000000000000008204811660408701526a01000000000000000000009091041660608501525b610cb384611352565b50505092915050565b606060018203610d0d57610cd4838561ffff16610e61565b6040805173ffffffffffffffffffffffffffffffffffffffff9092166020830152015b6040516020818303038152906040529050610d6d565b60028203610d3357610d23838561ffff16610902565b604051602001610cf79190612613565b6040517f0c509b5b000000000000000000000000000000000000000000000000000000008152600481018390526024015b60405180910390fd5b9392505050565b610d7c6112d1565b6020811115610db7576040517f6f85e1b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff821660009081526003602052604090205415610e02576040517fe4df7bef00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61ffff8216600081815260036020908152604091829020849055815192835282018390527ee9ab3709e58edd0db46318d63673d8ae4681fa3e51d9f9dc07cde5109ff74891016105f9565b610e556112d1565b610e5f6000611737565b565b73ffffffffffffffffffffffffffffffffffffffff808316600090815260046020908152604080832063ffffffff8616845290915281205490911680610ed25763ffffffff831660009081526005602052604090205473ffffffffffffffffffffffffffffffffffffffff16610ed4565b805b949350505050565b610ee78383836117ac565b505050565b6000610ed484848461187a565b366000610f068585611983565b91509150610f3582827f00000000000000000000000000000000000000000000000000000000000000006117ac565b6000610f41868661199f565b90506000610f5d610f5288886119b1565b63ffffffff166119d4565b90506000610f6f838361ffff16610902565b9050610f9c818686604051610f85929190612ec0565b6040518091039020610f978b8b611a6c565b611a96565b610ffb82610faa8a8a611c45565b85610fb58c8c611c5e565b610fbf8d8d611c81565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508e9250611c91915050565b5050505050505050565b61100d6112d1565b73ffffffffffffffffffffffffffffffffffffffff81166110b0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401610d64565b6110b981611737565b50565b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff16331461112b576040517f467409c300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6111388561ffff16611f44565b6001830361115f5761115a61ffff86168561115584860186612a8d565b611f8b565b6111b6565b600283036111815761115a61ffff86168561117c84860186612ed0565b612036565b6040517f0c509b5b00000000000000000000000000000000000000000000000000000000815260048101849052602401610d64565b5050505050565b6040805180820182526001815267ffffffffffffffff8316602082015290516002906000906111ef9088908890612ec0565b6040805191829003909120825260208083019390935290810160009081208682528352818120338083529084529082902084518154959094015167ffffffffffffffff16610100027fffffffffffffffffffffffffffffffffffffffffffffff0000000000000000ff941515949094167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909516949094179290921790925590517f2cb0eed7538baeae4c6fde038c0fd0384d27de0dd55a228c65847bda6aa1ab56916112c3918790879086908890612f05565b60405180910390a150505050565b60005473ffffffffffffffffffffffffffffffffffffffff163314610e5f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610d64565b602081015160ff1615801561136c5750606081015160ff16155b156110b9576040517fce2c375100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602081015160ff90811614806113be5750602081015160ff16155b156114055760808101515115611400576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484565b806020015160ff1681608001515114158061144057506002611429600160ff612fb9565b6114339190612fd2565b60ff16816020015160ff16115b15611477576040517f83aa17da00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611484816080015161207f565b604081015160ff908116148061149f5750604081015160ff16155b156115255760a081015151156114e1576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615611520576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc565b806040015160ff168160a001515114158061156057506002611549600160ff612fb9565b6115539190612fd2565b60ff16816040015160ff16115b15611597576040517f4221136600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b606081015160ff1615806115b85750806040015160ff16816060015160ff16115b156115ef576040517f38682fa900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6115fc8160a0015161207f565b73ffffffffffffffffffffffffffffffffffffffff8316600090815260016020818152604080842063ffffffff87168552825292839020845181548684015195870151606088015167ffffffffffffffff9093167fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000909216919091176801000000000000000060ff97881602177fffffffffffffffffffffffffffffffffffffffffff0000ffffffffffffffffff166901000000000000000000918716919091027fffffffffffffffffffffffffffffffffffffffffff00ffffffffffffffffffff16176a010000000000000000000095909116949094029390931783556080840151805185949361171393908501920190612302565b5060a0820151805161172f916002840191602090910190612302565b505050505050565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b605182146117e6576040517fc9bf37b700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60016117f28484612119565b60ff161461182c576040517f3a9ae7b900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8063ffffffff1661183d848461213b565b63ffffffff1614610ee7576040517f42d2c97e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160009060ff16156118fd5760005b846020015160ff168160ff1610156118e5576118cf85608001518260ff16815181106118bb576118bb612b1b565b60200260200101518585886000015161214b565b6118dd576000915050610d6d565b60010161188d565b50836040015160ff166000036118fd57506001610d6d565b606084015160005b856040015160ff168160ff161015611977576119478660a001518260ff168151811061193357611933612b1b565b60200260200101518686896000015161214b565b1561196f57816119568161301b565b9250508160ff1660000361196f57600192505050610d6d565b600101611905565b50600095945050505050565b3660006119936051828587613056565b915091505b9250929050565b6000610d6d6119ae84846121da565b90565b60006119c1600d60098486613056565b6119ca91613080565b60e01c9392505050565b600061ffff821115611a68576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f53616665436173743a2076616c756520646f65736e27742066697420696e203160448201527f36206269747300000000000000000000000000000000000000000000000000006064820152608401610d64565b5090565b6000611a7883836121ea565b604051611a86929190612ec0565b6040518091039020905092915050565b611aa183838361187a565b611ad7576040517f4c3118d400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b602083015160ff1615611b8f5760005b836020015160ff168160ff161015611b8d57600083815260026020908152604080832085845290915281206080860151805191929160ff8516908110611b2f57611b2f612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611ae7565b505b604083015160ff1615610ee75760005b836040015160ff168160ff16101561041a576000838152600260209081526040808320858452909152812060a0860151805191929160ff8516908110611be757611be7612b1b565b60209081029190910181015173ffffffffffffffffffffffffffffffffffffffff16825281019190915260400160002080547fffffffffffffffffffffffffffffffffffffffffffffff000000000000000000169055600101611b9f565b6000611c55602d600d8486613056565b610d6d916130c8565b6000611c6e600960018486613056565b611c7791613104565b60c01c9392505050565b3660006119938360718187613056565b611c9f848761ffff16610e61565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d03576040517fb7386d3200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163b600003611da0578373ffffffffffffffffffffffffffffffffffffffff168661ffff167feca5e9e3d49c3ee9d9362efa82baa91c668a7f032b3a403638ae65e27368013687868680519060200120604051611d939392919092835267ffffffffffffffff919091166020830152604082015260600190565b60405180910390a361172f565b61ffff8616600090815260036020526040812054611dbf9087906121fa565b85604051602001611dd192919061314a565b604080517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0818403018152908290527fc2fa4813000000000000000000000000000000000000000000000000000000008252915073ffffffffffffffffffffffffffffffffffffffff7f0000000000000000000000000000000000000000000000000000000000000000169063c2fa481390611e7b908a9085908a908a9089908b90600401613194565b600060405180830381600087803b158015611e9557600080fd5b505af1158015611ea9573d6000803e3d6000fd5b5050604080516060808201835261ffff8c1680835260208084018d815267ffffffffffffffff8c8116868801908152875194855291519284019290925251169381019390935273ffffffffffffffffffffffffffffffffffffffff8a169083015292507f3cd5e48f9730b129dc7550f0fcea9c767b7be37837cd10e55eb35f734f4bca04915060800160405180910390a15050505050505050565b611f4d8161229b565b6110b9576040517ff0c10d0400000000000000000000000000000000000000000000000000000000815263ffffffff82166004820152602401610d64565b73ffffffffffffffffffffffffffffffffffffffff828116600081815260046020908152604080832063ffffffff89168085529083529281902080547fffffffffffffffffffffffff00000000000000000000000000000000000000001695871695861790558051938452908301919091528101919091527f2bef5fe6b6383925f8e9893d464521c5fcd4f9d4dc14d32d900849c5ae0af710906060015b60405180910390a1505050565b6120418284836113a3565b61204b8284610902565b507f82118522aa536ac0e96cc5c689407ae42b89d592aa133890a01f1509842f508182848360405161202993929190613202565b6000805b8251811015610ee75760008382815181106120a0576120a0612b1b565b602002602001015190508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161161210f576040517f447516e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b9150600101612083565b60006121286001828486613056565b6121319161323d565b60f81c9392505050565b60006119c16031602d8486613056565b6000838152600260209081526040808320858452825280832073ffffffffffffffffffffffffffffffffffffffff88168452825280832081518083019092525460ff811615801580845261010090920467ffffffffffffffff169383019390935290916121d057508267ffffffffffffffff16816020015167ffffffffffffffff1610155b9695505050505050565b6000611c55605160318486613056565b3660006119938360518187613056565b60608115806122095750602082115b15612240576040517f18456c9b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8167ffffffffffffffff81111561225957612259612812565b6040519080825280601f01601f191660200182016040528015612283576020820181803683370190505b506008909202610100039290921b6020820152919050565b63ffffffff811660009081527fa6eef7e35abe7026729641147f7915573c7e97b47efa546f5f6e3230263bcb4960205260408120805468010000000000000000900460ff16151580610d6d5750546a0100000000000000000000900460ff16151592915050565b82805482825590600052602060002090810192821561237c579160200282015b8281111561237c57825182547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff909116178255602090920191600190910190612322565b50611a689291505b80821115611a685760008155600101612384565b60008083601f8401126123aa57600080fd5b50813567ffffffffffffffff8111156123c257600080fd5b60208301915083602082850101111561199857600080fd5b803567ffffffffffffffff811681146123f257600080fd5b919050565b6000806000806060858703121561240d57600080fd5b843567ffffffffffffffff81111561242457600080fd5b61243087828801612398565b90955093505060208501359150612449604086016123da565b905092959194509250565b803563ffffffff811681146123f257600080fd5b60006020828403121561247a57600080fd5b610d6d82612454565b6000806020838503121561249657600080fd5b823567ffffffffffffffff808211156124ae57600080fd5b818501915085601f8301126124c257600080fd5b8135818111156124d157600080fd5b8660208260051b85010111156124e657600080fd5b60209290920196919550909350505050565b73ffffffffffffffffffffffffffffffffffffffff811681146110b957600080fd5b6000806040838503121561252d57600080fd5b8235612538816124f8565b915061254660208401612454565b90509250929050565b60008151808452602080850194506020840160005b8381101561259657815173ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612564565b509495945050505050565b67ffffffffffffffff815116825260ff602082015116602083015260ff604082015116604083015260ff60608201511660608301526000608082015160c060808501526125f160c085018261254f565b905060a083015184820360a086015261260a828261254f565b95945050505050565b602081526000610d6d60208301846125a1565b6000806020838503121561263957600080fd5b823567ffffffffffffffff8082111561265157600080fd5b818501915085601f83011261266557600080fd5b81358181111561267457600080fd5b8660208260061b85010111156124e657600080fd5b60008060006060848603121561269e57600080fd5b833592506020840135915060408401356126b7816124f8565b809150509250925092565b803561ffff811681146123f257600080fd5b6000806000606084860312156126e957600080fd5b6126f2846126c2565b92506020840135612702816124f8565b929592945050506040919091013590565b60005b8381101561272e578181015183820152602001612716565b50506000910152565b6000815180845261274f816020860160208601612713565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610d6d6020830184612737565b600080604083850312156127a757600080fd5b6127b0836126c2565b946020939093013593505050565b6000806000604084860312156127d357600080fd5b833567ffffffffffffffff8111156127ea57600080fd5b6127f686828701612398565b9094509250612809905060208501612454565b90509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405160c0810167ffffffffffffffff8111828210171561286457612864612812565b60405290565b803560ff811681146123f257600080fd5b600082601f83011261288c57600080fd5b8135602067ffffffffffffffff808311156128a9576128a9612812565b8260051b6040517fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0603f830116810181811084821117156128ec576128ec612812565b604052938452602081870181019490810192508785111561290c57600080fd5b6020870191505b84821015612935578135612926816124f8565b83529183019190830190612913565b979650505050505050565b600060c0828403121561295257600080fd5b61295a612841565b9050612965826123da565b81526129736020830161286a565b60208201526129846040830161286a565b60408201526129956060830161286a565b6060820152608082013567ffffffffffffffff808211156129b557600080fd5b6129c18583860161287b565b608084015260a08401359150808211156129da57600080fd5b506129e78482850161287b565b60a08301525092915050565b600080600060608486031215612a0857600080fd5b833567ffffffffffffffff811115612a1f57600080fd5b612a2b86828701612940565b9660208601359650604090950135949350505050565b600080600060408486031215612a5657600080fd5b833567ffffffffffffffff811115612a6d57600080fd5b612a7986828701612398565b909790965060209590950135949350505050565b600060208284031215612a9f57600080fd5b8135610ed2816124f8565b600080600080600060808688031215612ac257600080fd5b612acb866126c2565b94506020860135612adb816124f8565b935060408601359250606086013567ffffffffffffffff811115612afe57600080fd5b612b0a88828901612398565b969995985093965092949392505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1833603018112612b7e57600080fd5b9190910192915050565b600082357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41833603018112612b7e57600080fd5b600060208284031215612bce57600080fd5b610d6d8261286a565b600060208284031215612be957600080fd5b610d6d826123da565b60006107a13683612940565b60008083357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe1843603018112612c3357600080fd5b830160208101925035905067ffffffffffffffff811115612c5357600080fd5b8060051b360382131561199857600080fd5b8183526000602080850194508260005b85811015612596578135612c88816124f8565b73ffffffffffffffffffffffffffffffffffffffff1687529582019590820190600101612c75565b60208082528181018390526000906040808401600586901b8501820187855b88811015612e3f577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc08089850301855282357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc18c3603018112612d3157600080fd5b8b0163ffffffff612d4182612454565b168552878101357fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41823603018112612d7857600080fd5b8589018890520167ffffffffffffffff612d91826123da565b1687860152612da188820161286a565b606060ff80831682890152612db78a850161286a565b92506080818416818a0152612dcd83860161286a565b935060a09250818416838a0152612de681860186612bfe565b60c08b81015294509150612e01905061010089018483612c65565b925050612e1081840184612bfe565b93509050838783030160e0880152612e29828483612c65565b978a019796505050928701925050600101612ccf565b509098975050505050505050565b6020808252818101839052600090604080840186845b87811015612eb35763ffffffff612e7983612454565b16835284820135612e89816124f8565b73ffffffffffffffffffffffffffffffffffffffff16838601529183019190830190600101612e63565b5090979650505050505050565b8183823760009101908152919050565b600060208284031215612ee257600080fd5b813567ffffffffffffffff811115612ef957600080fd5b610ed484828501612940565b73ffffffffffffffffffffffffffffffffffffffff8616815260806020820152836080820152838560a0830137600060a08583010152600060a07fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f870116830101905067ffffffffffffffff841660408301528260608301529695505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60ff82811682821603908111156107a1576107a1612f8a565b600060ff83168061300c577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b8060ff84160491505092915050565b600060ff82168061302e5761302e612f8a565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0192915050565b6000808585111561306657600080fd5b8386111561307357600080fd5b5050820193919092039150565b7fffffffff0000000000000000000000000000000000000000000000000000000081358181169160048510156130c05780818660040360031b1b83161692505b505092915050565b803560208310156107a1577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff602084900360031b1b1692915050565b7fffffffffffffffff00000000000000000000000000000000000000000000000081358181169160088510156130c05760089490940360031b84901b1690921692915050565b6000835161315c818460208801612713565b60609390931b7fffffffffffffffffffffffffffffffffffffffff000000000000000000000000169190920190815260140192915050565b61ffff8716815260c0602082015260006131b160c0830188612737565b73ffffffffffffffffffffffffffffffffffffffff8716604084015267ffffffffffffffff8616606084015284608084015282810360a08401526131f58185612737565b9998505050505050505050565b73ffffffffffffffffffffffffffffffffffffffff8416815263ffffffff8316602082015260606040820152600061260a60608301846125a1565b7fff0000000000000000000000000000000000000000000000000000000000000081358181169160018510156130c05760019490940360031b84901b169092169291505056fea2646970667358221220da1239d4ad10b7e9dd1d6b1a3f8c2b3e73f9ad36ba2a18f553a8a9d0044b8f5a64736f6c63430008160033",
1002
1033
  "devdoc": {
1003
1034
  "details": "ULN301 will be deployed on EndpointV1 and is for backward compatibility with ULN302 on EndpointV2. 301 can talk to both 301 and 302This is a gluing contract. It simply parses the requests and forward to the super.impl() accordingly.In this case, it combines the logic of ReceiveUlnBase and ReceiveLibBaseE1",
1004
1035
  "kind": "dev",
@@ -1020,9 +1051,6 @@
1020
1051
  },
1021
1052
  "transferOwnership(address)": {
1022
1053
  "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner."
1023
- },
1024
- "verifiable(bytes,bytes32)": {
1025
- "details": "keeping the same interface as 302a verifiable message requires it to be ULN verifiable only, excluding the endpoint verifiable check"
1026
1054
  }
1027
1055
  },
1028
1056
  "version": 1
@@ -1035,7 +1063,7 @@
1035
1063
  "storageLayout": {
1036
1064
  "storage": [
1037
1065
  {
1038
- "astId": 6813,
1066
+ "astId": 7779,
1039
1067
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1040
1068
  "label": "_owner",
1041
1069
  "offset": 0,
@@ -1043,23 +1071,23 @@
1043
1071
  "type": "t_address"
1044
1072
  },
1045
1073
  {
1046
- "astId": 16927,
1074
+ "astId": 17969,
1047
1075
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1048
1076
  "label": "ulnConfigs",
1049
1077
  "offset": 0,
1050
1078
  "slot": "1",
1051
- "type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)16876_storage))"
1079
+ "type": "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)17918_storage))"
1052
1080
  },
1053
1081
  {
1054
- "astId": 16033,
1082
+ "astId": 17043,
1055
1083
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1056
1084
  "label": "hashLookup",
1057
1085
  "offset": 0,
1058
1086
  "slot": "2",
1059
- "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage)))"
1087
+ "type": "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage)))"
1060
1088
  },
1061
1089
  {
1062
- "astId": 21564,
1090
+ "astId": 23922,
1063
1091
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1064
1092
  "label": "addressSizes",
1065
1093
  "offset": 0,
@@ -1067,7 +1095,7 @@
1067
1095
  "type": "t_mapping(t_uint32,t_uint256)"
1068
1096
  },
1069
1097
  {
1070
- "astId": 21668,
1098
+ "astId": 24026,
1071
1099
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1072
1100
  "label": "executors",
1073
1101
  "offset": 0,
@@ -1075,7 +1103,7 @@
1075
1103
  "type": "t_mapping(t_address,t_mapping(t_uint32,t_address))"
1076
1104
  },
1077
1105
  {
1078
- "astId": 21672,
1106
+ "astId": 24030,
1079
1107
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1080
1108
  "label": "defaultExecutors",
1081
1109
  "offset": 0,
@@ -1112,33 +1140,33 @@
1112
1140
  "numberOfBytes": "32",
1113
1141
  "value": "t_mapping(t_uint32,t_address)"
1114
1142
  },
1115
- "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)16876_storage))": {
1143
+ "t_mapping(t_address,t_mapping(t_uint32,t_struct(UlnConfig)17918_storage))": {
1116
1144
  "encoding": "mapping",
1117
1145
  "key": "t_address",
1118
1146
  "label": "mapping(address => mapping(uint32 => struct UlnConfig))",
1119
1147
  "numberOfBytes": "32",
1120
- "value": "t_mapping(t_uint32,t_struct(UlnConfig)16876_storage)"
1148
+ "value": "t_mapping(t_uint32,t_struct(UlnConfig)17918_storage)"
1121
1149
  },
1122
- "t_mapping(t_address,t_struct(Verification)16018_storage)": {
1150
+ "t_mapping(t_address,t_struct(Verification)17028_storage)": {
1123
1151
  "encoding": "mapping",
1124
1152
  "key": "t_address",
1125
1153
  "label": "mapping(address => struct Verification)",
1126
1154
  "numberOfBytes": "32",
1127
- "value": "t_struct(Verification)16018_storage"
1155
+ "value": "t_struct(Verification)17028_storage"
1128
1156
  },
1129
- "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage))": {
1157
+ "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage))": {
1130
1158
  "encoding": "mapping",
1131
1159
  "key": "t_bytes32",
1132
1160
  "label": "mapping(bytes32 => mapping(address => struct Verification))",
1133
1161
  "numberOfBytes": "32",
1134
- "value": "t_mapping(t_address,t_struct(Verification)16018_storage)"
1162
+ "value": "t_mapping(t_address,t_struct(Verification)17028_storage)"
1135
1163
  },
1136
- "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage)))": {
1164
+ "t_mapping(t_bytes32,t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage)))": {
1137
1165
  "encoding": "mapping",
1138
1166
  "key": "t_bytes32",
1139
1167
  "label": "mapping(bytes32 => mapping(bytes32 => mapping(address => struct Verification)))",
1140
1168
  "numberOfBytes": "32",
1141
- "value": "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)16018_storage))"
1169
+ "value": "t_mapping(t_bytes32,t_mapping(t_address,t_struct(Verification)17028_storage))"
1142
1170
  },
1143
1171
  "t_mapping(t_uint32,t_address)": {
1144
1172
  "encoding": "mapping",
@@ -1147,12 +1175,12 @@
1147
1175
  "numberOfBytes": "32",
1148
1176
  "value": "t_address"
1149
1177
  },
1150
- "t_mapping(t_uint32,t_struct(UlnConfig)16876_storage)": {
1178
+ "t_mapping(t_uint32,t_struct(UlnConfig)17918_storage)": {
1151
1179
  "encoding": "mapping",
1152
1180
  "key": "t_uint32",
1153
1181
  "label": "mapping(uint32 => struct UlnConfig)",
1154
1182
  "numberOfBytes": "32",
1155
- "value": "t_struct(UlnConfig)16876_storage"
1183
+ "value": "t_struct(UlnConfig)17918_storage"
1156
1184
  },
1157
1185
  "t_mapping(t_uint32,t_uint256)": {
1158
1186
  "encoding": "mapping",
@@ -1161,12 +1189,12 @@
1161
1189
  "numberOfBytes": "32",
1162
1190
  "value": "t_uint256"
1163
1191
  },
1164
- "t_struct(UlnConfig)16876_storage": {
1192
+ "t_struct(UlnConfig)17918_storage": {
1165
1193
  "encoding": "inplace",
1166
1194
  "label": "struct UlnConfig",
1167
1195
  "members": [
1168
1196
  {
1169
- "astId": 16863,
1197
+ "astId": 17905,
1170
1198
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1171
1199
  "label": "confirmations",
1172
1200
  "offset": 0,
@@ -1174,7 +1202,7 @@
1174
1202
  "type": "t_uint64"
1175
1203
  },
1176
1204
  {
1177
- "astId": 16865,
1205
+ "astId": 17907,
1178
1206
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1179
1207
  "label": "requiredDVNCount",
1180
1208
  "offset": 8,
@@ -1182,7 +1210,7 @@
1182
1210
  "type": "t_uint8"
1183
1211
  },
1184
1212
  {
1185
- "astId": 16867,
1213
+ "astId": 17909,
1186
1214
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1187
1215
  "label": "optionalDVNCount",
1188
1216
  "offset": 9,
@@ -1190,7 +1218,7 @@
1190
1218
  "type": "t_uint8"
1191
1219
  },
1192
1220
  {
1193
- "astId": 16869,
1221
+ "astId": 17911,
1194
1222
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1195
1223
  "label": "optionalDVNThreshold",
1196
1224
  "offset": 10,
@@ -1198,7 +1226,7 @@
1198
1226
  "type": "t_uint8"
1199
1227
  },
1200
1228
  {
1201
- "astId": 16872,
1229
+ "astId": 17914,
1202
1230
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1203
1231
  "label": "requiredDVNs",
1204
1232
  "offset": 0,
@@ -1206,7 +1234,7 @@
1206
1234
  "type": "t_array(t_address)dyn_storage"
1207
1235
  },
1208
1236
  {
1209
- "astId": 16875,
1237
+ "astId": 17917,
1210
1238
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1211
1239
  "label": "optionalDVNs",
1212
1240
  "offset": 0,
@@ -1216,12 +1244,12 @@
1216
1244
  ],
1217
1245
  "numberOfBytes": "96"
1218
1246
  },
1219
- "t_struct(Verification)16018_storage": {
1247
+ "t_struct(Verification)17028_storage": {
1220
1248
  "encoding": "inplace",
1221
1249
  "label": "struct Verification",
1222
1250
  "members": [
1223
1251
  {
1224
- "astId": 16015,
1252
+ "astId": 17025,
1225
1253
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1226
1254
  "label": "submitted",
1227
1255
  "offset": 0,
@@ -1229,7 +1257,7 @@
1229
1257
  "type": "t_bool"
1230
1258
  },
1231
1259
  {
1232
- "astId": 16017,
1260
+ "astId": 17027,
1233
1261
  "contract": "contracts/uln/uln301/ReceiveUln301.sol:ReceiveUln301",
1234
1262
  "label": "confirmations",
1235
1263
  "offset": 1,