@keep-network/tbtc-v2 0.1.1-dev.42 → 0.1.1-dev.43
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.
- package/artifacts/TBTC.json +3 -3
- package/artifacts/TBTCToken.json +3 -3
- package/artifacts/VendingMachine.json +10 -10
- package/artifacts/solcInputs/{002940e9cc8128f6629e90620c66cba5.json → f2c15d3cf1bd9566483f595c5ed30ccc.json} +10 -10
- package/build/contracts/GovernanceUtils.sol/GovernanceUtils.dbg.json +1 -1
- package/build/contracts/bank/Bank.sol/Bank.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.dbg.json +1 -1
- package/build/contracts/bridge/BitcoinTx.sol/BitcoinTx.json +2 -2
- package/build/contracts/bridge/Bridge.sol/Bridge.dbg.json +1 -1
- package/build/contracts/bridge/Bridge.sol/Bridge.json +123 -185
- package/build/contracts/bridge/BridgeState.sol/BridgeState.dbg.json +1 -1
- package/build/contracts/bridge/BridgeState.sol/BridgeState.json +2 -2
- package/build/contracts/bridge/Deposit.sol/Deposit.dbg.json +1 -1
- package/build/contracts/bridge/Deposit.sol/Deposit.json +2 -2
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.dbg.json +1 -1
- package/build/contracts/bridge/EcdsaLib.sol/EcdsaLib.json +2 -2
- package/build/contracts/bridge/Fraud.sol/Fraud.dbg.json +1 -1
- package/build/contracts/bridge/Fraud.sol/Fraud.json +2 -54
- package/build/contracts/bridge/IRelay.sol/IRelay.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.dbg.json +1 -1
- package/build/contracts/bridge/MovingFunds.sol/MovingFunds.json +2 -2
- package/build/contracts/bridge/Redemption.sol/OutboundTx.dbg.json +4 -0
- package/build/contracts/bridge/{Redeem.sol → Redemption.sol}/OutboundTx.json +3 -3
- package/build/contracts/bridge/Redemption.sol/Redemption.dbg.json +4 -0
- package/build/contracts/bridge/Redemption.sol/Redemption.json +92 -0
- package/build/contracts/bridge/Sweep.sol/Sweep.dbg.json +1 -1
- package/build/contracts/bridge/Sweep.sol/Sweep.json +2 -2
- package/build/contracts/bridge/VendingMachine.sol/VendingMachine.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.dbg.json +1 -1
- package/build/contracts/bridge/Wallets.sol/Wallets.json +2 -2
- package/build/contracts/token/TBTC.sol/TBTC.dbg.json +1 -1
- package/build/contracts/vault/IVault.sol/IVault.dbg.json +1 -1
- package/build/contracts/vault/TBTCVault.sol/TBTCVault.dbg.json +1 -1
- package/contracts/bridge/BitcoinTx.sol +19 -26
- package/contracts/bridge/Bridge.sol +466 -486
- package/contracts/bridge/BridgeState.sol +5 -23
- package/contracts/bridge/Deposit.sol +22 -0
- package/contracts/bridge/EcdsaLib.sol +15 -0
- package/contracts/bridge/Fraud.sol +17 -14
- package/contracts/bridge/MovingFunds.sol +13 -5
- package/contracts/bridge/{Redeem.sol → Redemption.sol} +13 -6
- package/contracts/bridge/Sweep.sol +13 -5
- package/package.json +1 -1
- package/build/contracts/bridge/Redeem.sol/OutboundTx.dbg.json +0 -4
- package/build/contracts/bridge/Redeem.sol/Redeem.dbg.json +0 -4
- package/build/contracts/bridge/Redeem.sol/Redeem.json +0 -92
|
@@ -17,7 +17,7 @@ pragma solidity ^0.8.9;
|
|
|
17
17
|
|
|
18
18
|
import "./IRelay.sol";
|
|
19
19
|
import "./Deposit.sol";
|
|
20
|
-
import "./
|
|
20
|
+
import "./Redemption.sol";
|
|
21
21
|
import "./Fraud.sol";
|
|
22
22
|
import "./Wallets.sol";
|
|
23
23
|
|
|
@@ -123,7 +123,7 @@ library BridgeState {
|
|
|
123
123
|
// successfully
|
|
124
124
|
// - `notifyRedemptionTimeout` in case the request was reported
|
|
125
125
|
// to be timed out
|
|
126
|
-
mapping(uint256 =>
|
|
126
|
+
mapping(uint256 => Redemption.RedemptionRequest) pendingRedemptions;
|
|
127
127
|
// Collection of all timed out redemptions requests indexed by
|
|
128
128
|
// redemption key built as
|
|
129
129
|
// `keccak256(walletPubKeyHash | redeemerOutputScript)`. The
|
|
@@ -137,7 +137,7 @@ library BridgeState {
|
|
|
137
137
|
// - `notifyRedemptionTimeout` which puts the redemption key to this
|
|
138
138
|
// mapping basing on a timed out request stored previously in
|
|
139
139
|
// `pendingRedemptions` mapping.
|
|
140
|
-
mapping(uint256 =>
|
|
140
|
+
mapping(uint256 => Redemption.RedemptionRequest) timedOutRedemptions;
|
|
141
141
|
// The amount of stake slashed from each member of a wallet for a fraud.
|
|
142
142
|
uint256 fraudSlashingAmount;
|
|
143
143
|
// The percentage of the notifier reward from the staking contract
|
|
@@ -192,9 +192,9 @@ library BridgeState {
|
|
|
192
192
|
/// seconds, determines how frequently a new wallet creation can be
|
|
193
193
|
/// requested
|
|
194
194
|
/// @param _walletMinBtcBalance New value of the wallet minimum BTC balance
|
|
195
|
-
/// in
|
|
195
|
+
/// in satoshis, used to decide about wallet creation or closing
|
|
196
196
|
/// @param _walletMaxBtcBalance New value of the wallet maximum BTC balance
|
|
197
|
-
/// in
|
|
197
|
+
/// in satoshis, used to decide about wallet creation
|
|
198
198
|
/// @param _walletMaxAge New value of the wallet maximum age in seconds,
|
|
199
199
|
/// indicates the maximum age of a wallet in seconds, after which
|
|
200
200
|
/// the wallet moving funds process can be requested
|
|
@@ -230,22 +230,4 @@ library BridgeState {
|
|
|
230
230
|
_walletMaxAge
|
|
231
231
|
);
|
|
232
232
|
}
|
|
233
|
-
|
|
234
|
-
// TODO: Is it the right place for this function? Should we move it to Bridge?
|
|
235
|
-
/// @notice Determines the current Bitcoin SPV proof difficulty context.
|
|
236
|
-
/// @return proofDifficulty Bitcoin proof difficulty context.
|
|
237
|
-
function proofDifficultyContext(Storage storage self)
|
|
238
|
-
internal
|
|
239
|
-
view
|
|
240
|
-
returns (BitcoinTx.ProofDifficulty memory proofDifficulty)
|
|
241
|
-
{
|
|
242
|
-
IRelay relay = self.relay;
|
|
243
|
-
proofDifficulty.currentEpochDifficulty = relay
|
|
244
|
-
.getCurrentEpochDifficulty();
|
|
245
|
-
proofDifficulty.previousEpochDifficulty = relay
|
|
246
|
-
.getPrevEpochDifficulty();
|
|
247
|
-
proofDifficulty.difficultyFactor = self.txProofDifficultyFactor;
|
|
248
|
-
|
|
249
|
-
return proofDifficulty;
|
|
250
|
-
}
|
|
251
233
|
}
|
|
@@ -22,6 +22,28 @@ import "./BitcoinTx.sol";
|
|
|
22
22
|
import "./BridgeState.sol";
|
|
23
23
|
import "./Wallets.sol";
|
|
24
24
|
|
|
25
|
+
/// @title Bridge deposit
|
|
26
|
+
/// @notice The library handles the logic for revealing Bitcoin deposits to
|
|
27
|
+
/// the Bridge.
|
|
28
|
+
/// @dev The depositor puts together a P2SH or P2WSH address to deposit the
|
|
29
|
+
/// funds. This script is unique to each depositor and looks like this:
|
|
30
|
+
///
|
|
31
|
+
/// ```
|
|
32
|
+
/// <depositorAddress> DROP
|
|
33
|
+
/// <blindingFactor> DROP
|
|
34
|
+
/// DUP HASH160 <walletPubKeyHash> EQUAL
|
|
35
|
+
/// IF
|
|
36
|
+
/// CHECKSIG
|
|
37
|
+
/// ELSE
|
|
38
|
+
/// DUP HASH160 <refundPubkeyHash> EQUALVERIFY
|
|
39
|
+
/// <refundLocktime> CHECKLOCKTIMEVERIFY DROP
|
|
40
|
+
/// CHECKSIG
|
|
41
|
+
/// ENDIF
|
|
42
|
+
/// ```
|
|
43
|
+
///
|
|
44
|
+
/// Since each depositor has their own Ethereum address and their own
|
|
45
|
+
/// secret blinding factor, each depositor’s script is unique, and the hash
|
|
46
|
+
/// of each depositor’s script is unique.
|
|
25
47
|
library Deposit {
|
|
26
48
|
using BTCUtils for bytes;
|
|
27
49
|
using BytesLib for bytes;
|
|
@@ -1,3 +1,18 @@
|
|
|
1
|
+
// SPDX-License-Identifier: MIT
|
|
2
|
+
|
|
3
|
+
// ██████████████ ▐████▌ ██████████████
|
|
4
|
+
// ██████████████ ▐████▌ ██████████████
|
|
5
|
+
// ▐████▌ ▐████▌
|
|
6
|
+
// ▐████▌ ▐████▌
|
|
7
|
+
// ██████████████ ▐████▌ ██████████████
|
|
8
|
+
// ██████████████ ▐████▌ ██████████████
|
|
9
|
+
// ▐████▌ ▐████▌
|
|
10
|
+
// ▐████▌ ▐████▌
|
|
11
|
+
// ▐████▌ ▐████▌
|
|
12
|
+
// ▐████▌ ▐████▌
|
|
13
|
+
// ▐████▌ ▐████▌
|
|
14
|
+
// ▐████▌ ▐████▌
|
|
15
|
+
|
|
1
16
|
pragma solidity ^0.8.9;
|
|
2
17
|
|
|
3
18
|
import "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
|
|
@@ -24,6 +24,23 @@ import "./EcdsaLib.sol";
|
|
|
24
24
|
import "./BridgeState.sol";
|
|
25
25
|
import "./Wallets.sol";
|
|
26
26
|
|
|
27
|
+
/// @title Bridge fraud
|
|
28
|
+
/// @notice The library handles the logic for challenging Bridge wallets that
|
|
29
|
+
/// committed fraud.
|
|
30
|
+
/// @dev Anyone can submit a fraud challenge indicating that a UTXO being under
|
|
31
|
+
/// the wallet control was unlocked by the wallet but was not used
|
|
32
|
+
/// according to the protocol rules. That means the wallet signed
|
|
33
|
+
/// a transaction input pointing to that UTXO and there is a unique
|
|
34
|
+
/// sighash and signature pair associated with that input.
|
|
35
|
+
///
|
|
36
|
+
/// In order to defeat the challenge, the same wallet public key and
|
|
37
|
+
/// signature must be provided as were used to calculate the sighash during
|
|
38
|
+
/// the challenge. The wallet provides the preimage which produces sighash
|
|
39
|
+
/// used to generate the ECDSA signature that is the subject of the fraud
|
|
40
|
+
/// claim. The fraud challenge defeat attempt will only succeed if the
|
|
41
|
+
/// inputs in the preimage are considered honestly spent by the wallet.
|
|
42
|
+
/// Therefore the transaction spending the UTXO must be proven in the
|
|
43
|
+
/// Bridge before a challenge defeat is called.
|
|
27
44
|
library Fraud {
|
|
28
45
|
using BytesLib for bytes;
|
|
29
46
|
using BTCUtils for bytes;
|
|
@@ -41,20 +58,6 @@ library Fraud {
|
|
|
41
58
|
bool resolved;
|
|
42
59
|
}
|
|
43
60
|
|
|
44
|
-
event FraudSlashingAmountUpdated(uint256 newFraudSlashingAmount);
|
|
45
|
-
|
|
46
|
-
event FraudNotifierRewardMultiplierUpdated(
|
|
47
|
-
uint256 newFraudNotifierRewardMultiplier
|
|
48
|
-
);
|
|
49
|
-
|
|
50
|
-
event FraudChallengeDefeatTimeoutUpdated(
|
|
51
|
-
uint256 newFraudChallengeDefeatTimeout
|
|
52
|
-
);
|
|
53
|
-
|
|
54
|
-
event FraudChallengeDepositAmountUpdated(
|
|
55
|
-
uint256 newFraudChallengeDepositAmount
|
|
56
|
-
);
|
|
57
|
-
|
|
58
61
|
event FraudChallengeSubmitted(
|
|
59
62
|
bytes20 walletPublicKeyHash,
|
|
60
63
|
bytes32 sighash,
|
|
@@ -20,11 +20,20 @@ import {BytesLib} from "@keep-network/bitcoin-spv-sol/contracts/BytesLib.sol";
|
|
|
20
20
|
|
|
21
21
|
import "./BitcoinTx.sol";
|
|
22
22
|
import "./BridgeState.sol";
|
|
23
|
-
import "./
|
|
23
|
+
import "./Redemption.sol";
|
|
24
24
|
|
|
25
|
+
/// @title Moving Bridge wallet funds
|
|
26
|
+
/// @notice The library handles the logic for moving Bitcoin between Bridge
|
|
27
|
+
/// wallets.
|
|
28
|
+
/// @dev A wallet that failed a heartbeat, did not process requested redemption
|
|
29
|
+
/// on time, or qualifies to be closed, begins the procedure of moving
|
|
30
|
+
/// funds to other wallets in the Bridge. The wallet needs to commit to
|
|
31
|
+
/// which other Live wallets it is moving the funds to and then, provide an
|
|
32
|
+
/// SPV proof of moving funds to the previously committed wallets.
|
|
25
33
|
library MovingFunds {
|
|
26
34
|
using BridgeState for BridgeState.Storage;
|
|
27
35
|
using Wallets for BridgeState.Storage;
|
|
36
|
+
using BitcoinTx for BridgeState.Storage;
|
|
28
37
|
|
|
29
38
|
using BTCUtils for bytes;
|
|
30
39
|
using BytesLib for bytes;
|
|
@@ -90,10 +99,9 @@ library MovingFunds {
|
|
|
90
99
|
// can assume the transaction happened on Bitcoin chain and has
|
|
91
100
|
// a sufficient number of confirmations as determined by
|
|
92
101
|
// `txProofDifficultyFactor` constant.
|
|
93
|
-
bytes32 movingFundsTxHash =
|
|
102
|
+
bytes32 movingFundsTxHash = self.validateProof(
|
|
94
103
|
movingFundsTx,
|
|
95
|
-
movingFundsProof
|
|
96
|
-
self.proofDifficultyContext()
|
|
104
|
+
movingFundsProof
|
|
97
105
|
);
|
|
98
106
|
|
|
99
107
|
// Process the moving funds transaction input. Specifically, check if
|
|
@@ -137,7 +145,7 @@ library MovingFunds {
|
|
|
137
145
|
/// - The total outputs value must be evenly divided over all outputs.
|
|
138
146
|
function processMovingFundsTxOutputs(bytes memory movingFundsTxOutputVector)
|
|
139
147
|
internal
|
|
140
|
-
|
|
148
|
+
pure
|
|
141
149
|
returns (bytes32 targetWalletsHash, uint256 outputsTotalValue)
|
|
142
150
|
{
|
|
143
151
|
// Determining the total number of Bitcoin transaction outputs in
|
|
@@ -140,10 +140,18 @@ library OutboundTx {
|
|
|
140
140
|
}
|
|
141
141
|
}
|
|
142
142
|
|
|
143
|
-
|
|
144
|
-
library
|
|
143
|
+
/// @title Bridge redemption
|
|
144
|
+
/// @notice The library handles the logic for redeeming Bitcoin balances from
|
|
145
|
+
/// the Bridge.
|
|
146
|
+
/// @dev To initiate a redemption, a user with a Bank balance supplies
|
|
147
|
+
/// a Bitcoin address. Then, the system calculates the redemption fee, and
|
|
148
|
+
/// releases balance to the provided Bitcoin address. Just like in case of
|
|
149
|
+
/// sweeps of revealed deposits, redemption requests are processed in
|
|
150
|
+
/// batches and require SPV proof to be submitted to the Bridge.
|
|
151
|
+
library Redemption {
|
|
145
152
|
using BridgeState for BridgeState.Storage;
|
|
146
153
|
using Wallets for BridgeState.Storage;
|
|
154
|
+
using BitcoinTx for BridgeState.Storage;
|
|
147
155
|
|
|
148
156
|
using BTCUtils for bytes;
|
|
149
157
|
using BytesLib for bytes;
|
|
@@ -430,10 +438,9 @@ library Redeem {
|
|
|
430
438
|
// can assume the transaction happened on Bitcoin chain and has
|
|
431
439
|
// a sufficient number of confirmations as determined by
|
|
432
440
|
// `txProofDifficultyFactor` constant.
|
|
433
|
-
bytes32 redemptionTxHash =
|
|
441
|
+
bytes32 redemptionTxHash = self.validateProof(
|
|
434
442
|
redemptionTx,
|
|
435
|
-
redemptionProof
|
|
436
|
-
self.proofDifficultyContext()
|
|
443
|
+
redemptionProof
|
|
437
444
|
);
|
|
438
445
|
|
|
439
446
|
// Process the redemption transaction input. Specifically, check if it
|
|
@@ -791,7 +798,7 @@ library Redeem {
|
|
|
791
798
|
uint256 redemptionKey = uint256(
|
|
792
799
|
keccak256(abi.encodePacked(walletPubKeyHash, redeemerOutputScript))
|
|
793
800
|
);
|
|
794
|
-
|
|
801
|
+
Redemption.RedemptionRequest memory request = self.pendingRedemptions[
|
|
795
802
|
redemptionKey
|
|
796
803
|
];
|
|
797
804
|
|
|
@@ -23,8 +23,19 @@ import "./Wallets.sol";
|
|
|
23
23
|
|
|
24
24
|
import "../bank/Bank.sol";
|
|
25
25
|
|
|
26
|
+
/// @title Bridge deposit sweep
|
|
27
|
+
/// @notice The library handles the logic for sweeping transactions revealed to
|
|
28
|
+
/// the Bridge
|
|
29
|
+
/// @dev Bridge active wallet periodically signs a transaction that unlocks all
|
|
30
|
+
/// of the valid, revealed deposits above the dust threshold, combines them
|
|
31
|
+
/// into a single UTXO with the existing main wallet UTXO, and relocks
|
|
32
|
+
/// those transactions without a 30-day refund clause to the same wallet.
|
|
33
|
+
/// This has two main effects: it consolidates the UTXO set and it disables
|
|
34
|
+
/// the refund. Balances of depositors in the Bank are increased when the
|
|
35
|
+
/// SPV sweep proof is submitted to the Bridge.
|
|
26
36
|
library Sweep {
|
|
27
37
|
using BridgeState for BridgeState.Storage;
|
|
38
|
+
using BitcoinTx for BridgeState.Storage;
|
|
28
39
|
|
|
29
40
|
using BTCUtils for bytes;
|
|
30
41
|
|
|
@@ -105,11 +116,7 @@ library Sweep {
|
|
|
105
116
|
// can assume the transaction happened on Bitcoin chain and has
|
|
106
117
|
// a sufficient number of confirmations as determined by
|
|
107
118
|
// `txProofDifficultyFactor` constant.
|
|
108
|
-
bytes32 sweepTxHash =
|
|
109
|
-
sweepTx,
|
|
110
|
-
sweepProof,
|
|
111
|
-
self.proofDifficultyContext()
|
|
112
|
-
);
|
|
119
|
+
bytes32 sweepTxHash = self.validateProof(sweepTx, sweepProof);
|
|
113
120
|
|
|
114
121
|
// Process sweep transaction output and extract its target wallet
|
|
115
122
|
// public key hash and value.
|
|
@@ -212,6 +219,7 @@ library Sweep {
|
|
|
212
219
|
BitcoinTx.UTXO calldata mainUtxo
|
|
213
220
|
)
|
|
214
221
|
internal
|
|
222
|
+
view
|
|
215
223
|
returns (
|
|
216
224
|
Wallets.Wallet storage wallet,
|
|
217
225
|
BitcoinTx.UTXO memory resolvedMainUtxo
|
package/package.json
CHANGED
|
@@ -1,92 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"_format": "hh-sol-artifact-1",
|
|
3
|
-
"contractName": "Redeem",
|
|
4
|
-
"sourceName": "contracts/bridge/Redeem.sol",
|
|
5
|
-
"abi": [
|
|
6
|
-
{
|
|
7
|
-
"anonymous": false,
|
|
8
|
-
"inputs": [
|
|
9
|
-
{
|
|
10
|
-
"indexed": false,
|
|
11
|
-
"internalType": "bytes20",
|
|
12
|
-
"name": "walletPubKeyHash",
|
|
13
|
-
"type": "bytes20"
|
|
14
|
-
},
|
|
15
|
-
{
|
|
16
|
-
"indexed": false,
|
|
17
|
-
"internalType": "bytes",
|
|
18
|
-
"name": "redeemerOutputScript",
|
|
19
|
-
"type": "bytes"
|
|
20
|
-
},
|
|
21
|
-
{
|
|
22
|
-
"indexed": false,
|
|
23
|
-
"internalType": "address",
|
|
24
|
-
"name": "redeemer",
|
|
25
|
-
"type": "address"
|
|
26
|
-
},
|
|
27
|
-
{
|
|
28
|
-
"indexed": false,
|
|
29
|
-
"internalType": "uint64",
|
|
30
|
-
"name": "requestedAmount",
|
|
31
|
-
"type": "uint64"
|
|
32
|
-
},
|
|
33
|
-
{
|
|
34
|
-
"indexed": false,
|
|
35
|
-
"internalType": "uint64",
|
|
36
|
-
"name": "treasuryFee",
|
|
37
|
-
"type": "uint64"
|
|
38
|
-
},
|
|
39
|
-
{
|
|
40
|
-
"indexed": false,
|
|
41
|
-
"internalType": "uint64",
|
|
42
|
-
"name": "txMaxFee",
|
|
43
|
-
"type": "uint64"
|
|
44
|
-
}
|
|
45
|
-
],
|
|
46
|
-
"name": "RedemptionRequested",
|
|
47
|
-
"type": "event"
|
|
48
|
-
},
|
|
49
|
-
{
|
|
50
|
-
"anonymous": false,
|
|
51
|
-
"inputs": [
|
|
52
|
-
{
|
|
53
|
-
"indexed": false,
|
|
54
|
-
"internalType": "bytes20",
|
|
55
|
-
"name": "walletPubKeyHash",
|
|
56
|
-
"type": "bytes20"
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"indexed": false,
|
|
60
|
-
"internalType": "bytes",
|
|
61
|
-
"name": "redeemerOutputScript",
|
|
62
|
-
"type": "bytes"
|
|
63
|
-
}
|
|
64
|
-
],
|
|
65
|
-
"name": "RedemptionTimedOut",
|
|
66
|
-
"type": "event"
|
|
67
|
-
},
|
|
68
|
-
{
|
|
69
|
-
"anonymous": false,
|
|
70
|
-
"inputs": [
|
|
71
|
-
{
|
|
72
|
-
"indexed": false,
|
|
73
|
-
"internalType": "bytes20",
|
|
74
|
-
"name": "walletPubKeyHash",
|
|
75
|
-
"type": "bytes20"
|
|
76
|
-
},
|
|
77
|
-
{
|
|
78
|
-
"indexed": false,
|
|
79
|
-
"internalType": "bytes32",
|
|
80
|
-
"name": "redemptionTxHash",
|
|
81
|
-
"type": "bytes32"
|
|
82
|
-
}
|
|
83
|
-
],
|
|
84
|
-
"name": "RedemptionsCompleted",
|
|
85
|
-
"type": "event"
|
|
86
|
-
}
|
|
87
|
-
],
|
|
88
|
-
"bytecode": "0x613bb761003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806313d0c668146100505780637333b36914610072578063a164de6e14610092575b600080fd5b81801561005c57600080fd5b5061007061006b3660046134e1565b6100b2565b005b81801561007e57600080fd5b5061007061008d36600461356b565b6105be565b81801561009e57600080fd5b506100706100ad3660046135ea565b610d71565b60008383836040516020016100c993929190613682565b60408051808303601f1901815282825280516020918201206000818152600a8a01835283902060a08501845280546001600160a01b0381168652600160a01b900467ffffffffffffffff9081169386019390935260010154808316938501939093526801000000000000000083049091166060840152600160801b90910463ffffffff16608083018190529092506101b25760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207265717565737420646f6573206e6f7420657869736044820152601d60fa1b60648201526084015b60405180910390fd5b428660090154826080015163ffffffff166101cd91906136bc565b1061023f5760405162461bcd60e51b8152602060048201526024808201527f526564656d7074696f6e207265717565737420686173206e6f742074696d656460448201527f206f75740000000000000000000000000000000000000000000000000000000060648201526084016101a9565b6001600160601b031985166000908152601487016020908152604091829020918301519083015161027091906136d4565b60028201805460009061028e90849067ffffffffffffffff166136d4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160048111156102c7576102c76136fd565b6002820154600160801b900460ff1660048111156102e7576102e76136fd565b14806103115750600280820154600160801b900460ff16600481111561030f5761030f6136fd565b145b8061033b575060046002820154600160801b900460ff166004811115610339576103396136fd565b145b6103ad5760405162461bcd60e51b815260206004820152603b60248201527f5468652077616c6c6574206d75737420626520696e204c6976652c204d6f766960448201527f6e6746756e6473206f72205465726d696e61746564207374617465000000000060648201526084016101a9565b6000838152600b88016020908152604080832085518154878501516001600160a01b039092166001600160e01b031991821617600160a01b67ffffffffffffffff93841602178355878401516001938401805460608b015160808c01519386167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000009190951602939093177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff9092169190910217909155600a8c019093529220805490911681558101805473ffffffffffffffffffffffffffffffffffffffff191690556002820154600160801b900460ff1660048111156104cc576104cc6136fd565b14806104f65750600280820154600160801b900460ff1660048111156104f4576104f46136fd565b145b15610505576105058787611117565b7f013dddc8debc4730cd01232fdcea9ae6013689837732356c187fe5edb9a8a8d58686866040516105389392919061373c565b60405180910390a18654825160208401516040516356a6d9ef60e01b81526001600160a01b03928316600482015267ffffffffffffffff90911660248201529116906356a6d9ef90604401600060405180830381600087803b15801561059d57600080fd5b505af11580156105b1573d6000803e3d6000fd5b5050505050505050505050565b6001600160601b031985166000908152601487016020526040902060016002820154600160801b900460ff1660048111156105fb576105fb6136fd565b146106485760405162461bcd60e51b815260206004820152601c60248201527f57616c6c6574206d75737420626520696e204c6976652073746174650000000060448201526064016101a9565b6001810154806106a45760405162461bcd60e51b815260206004820152602160248201527f4e6f206d61696e205554584f20666f722074686520676976656e2077616c6c656044820152601d60fa1b60648201526084016101a9565b8086356106b76040890160208a01613765565b6106c760608a0160408b0161378b565b6040516020016107049392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146107675760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101a9565b6000610799600060c01b8787604051602001610785939291906137a6565b60405160208183030381529060405261120c565b905060008151116108125760405162461bcd60e51b815260206004820152602e60248201527f52656465656d6572206f757470757420736372697074206d757374206265206160448201527f207374616e64617264207479706500000000000000000000000000000000000060648201526084016101a9565b80805190602001208860405160200161083b91906001600160601b031991909116815260140190565b6040516020818303038152906040528051906020012014156108c55760405162461bcd60e51b815260206004820152603760248201527f52656465656d6572206f757470757420736372697074206d757374206e6f742060448201527f706f696e7420746f207468652077616c6c657420504b4800000000000000000060648201526084016101a9565b600889015467ffffffffffffffff68010000000000000000909104811690851610156109335760405162461bcd60e51b815260206004820152601b60248201527f526564656d7074696f6e20616d6f756e7420746f6f20736d616c6c000000000060448201526064016101a9565b600088878760405160200161094a93929190613682565b60408051808303601f1901815291815281516020928301206000818152600a8e01909352912060010154909150600160801b900463ffffffff1615610a1d5760405162461bcd60e51b815260206004820152604a60248201527f546865726520697320612070656e64696e6720726564656d7074696f6e20726560448201527f71756573742066726f6d20746869732077616c6c657420746f2074686520736160648201527f6d65206164647265737300000000000000000000000000000000000000000000608482015260a4016101a9565b60088a0154600090600160801b900467ffffffffffffffff16610a41576000610a61565b60088b0154610a6190600160801b900467ffffffffffffffff16876137e0565b60088c01549091507801000000000000000000000000000000000000000000000000900467ffffffffffffffff16610a9982886136d4565b600287018054600090610ab790849067ffffffffffffffff16613807565b82546101009290920a67ffffffffffffffff8181021990931691831602179091556002880154169050610af060608c0160408d0161378b565b67ffffffffffffffff161015610b485760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742077616c6c65742066756e64730000000000000060448201526064016101a9565b6040518060a00160405280336001600160a01b031681526020018867ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff1681526020014263ffffffff168152508c600a01600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055509050507f97a0199072f487232635d50ab75860891afe0b91c976ed2fc76502c4d82d0d958b8a8a338b8787604051610cd09796959493929190613833565b60405180910390a18b546040517f7c6db49c00000000000000000000000000000000000000000000000000000000815233600482015230602482015267ffffffffffffffff891660448201526001600160a01b0390911690637c6db49c90606401600060405180830381600087803b158015610d4b57600080fd5b505af1158015610d5f573d6000803e3d6000fd5b50505050505050505050505050505050565b6000610d868585610d81896114b2565b6115fd565b9050610dd786610d996020880188613897565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506118ee9050565b6001600160601b03198216600090815260148701602052604090206002810154600160801b900460ff166001816004811115610e1557610e156136fd565b1480610e3257506002816004811115610e3057610e306136fd565b145b610ea45760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084016101a9565b6000610ef389610eb760408b018b613897565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611b48915050565b606081015190915067ffffffffffffffff1615610f74578381604001518260600151604051602001610f529392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60408051601f1981840301815291905280516020909101206001840155610f7c565b600060018401555b8051600284018054600090610f9c90849067ffffffffffffffff166136d4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa45596c10f758d32ec8cca64a0fbfe776052b08fdb3f026e0a87f52118bf8fbe85856040516110089291906001600160601b0319929092168252602082015260400190565b60405180910390a1885481516040517f392aee4300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001600160a01b039091169063392aee4390602401600060405180830381600087803b15801561107a57600080fd5b505af115801561108e573d6000803e3d6000fd5b50508a546004808d015460208601516040516356a6d9ef60e01b81526001600160a01b039283169381019390935267ffffffffffffffff16602483015290911692506356a6d9ef9150604401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50505050505050505050505050565b6001600160601b031981166000908152601483016020526040902060020154600160801b900460ff166001816004811115611154576111546136fd565b14806111715750600281600481111561116f5761116f6136fd565b145b6111e35760405162461bcd60e51b815260206004820152603160248201527f45434453412077616c6c6574206d75737420626520696e204c697665206f722060448201527f4d6f76696e6746756e647320737461746500000000000000000000000000000060648201526084016101a9565b60018160048111156111f7576111f76136fd565b1415611207576112078383611c7f565b505050565b6060600082600881518110611223576112236138de565b0160200151835160f89190911c915061123d8260096138f4565b60ff161461125b575050604080516020810190915260008152919050565b8260098151811061126e5761126e6138de565b016020015160f81c6113145760028160ff16101561129c575050604080516020810190915260008152919050565b600083600a815181106112b1576112b16138de565b016020015160f81c90506112c6600283613919565b60ff16811415806112e45750806020141580156112e4575080601414155b1561130057505060408051602081019091526000815292915050565b61130c84600b83611d80565b949350505050565b6000611321846008611e4a565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156113fe5783600b81518110611380576113806138de565b60209101015160f81c60141415806113d557506113ab600285516113a4919061393c565b8590611e4a565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b156113f157505060408051602081019091526000815292915050565b61130c84600c6014611d80565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000008216141561149b578360018551611457919061393c565b81518110611467576114676138de565b60209101015160f81c60871461148e57505060408051602081019091526000815292915050565b61130c84600b6014611d80565b505050604080516020810190915260008152919050565b6114d660405180606001604052806000815260200160008152602001600081525090565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691829163113764be916004808301926020929190829003018186803b15801561153757600080fd5b505afa15801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f9190613953565b826000018181525050806001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190613953565b602083015250600390910154604082015290565b600061164961160f6020860186613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e6292505050565b6116955760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f766964656400000060448201526064016101a9565b6116df6116a56040860186613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f1292505050565b61172b5760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f7669646564000060448201526064016101a9565b61178e61173b602086018661396c565b6117486020870187613897565b6117556040890189613897565b61176560808b0160608c0161396c565b60405160200161177a96959493929190613996565b604051602081830303815290604052611fb5565b90506118296117dd6117a36040860186613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fdc92505050565b6117e78580613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020870135611fe9565b61189b5760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e6420747820686173680000000060648201526084016101a9565b6118e76118ab6040850185613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250612025915050565b9392505050565b6001600160601b0319811660009081526014850160205260409020600101548061195a5760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d61696e205554584f20666f7220676976656e2077616c6c657400000060448201526064016101a9565b80833561196d6040860160208701613765565b61197d606087016040880161378b565b6040516020016119ba9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b6040516020818303038152906040528051906020012014611a1d5760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101a9565b600080611a2986612288565b9092509050843582148015611a58575063ffffffff8116611a506040870160208801613765565b63ffffffff16145b611aca5760405162461bcd60e51b815260206004820152603f60248201527f4f7574626f756e64207472616e73616374696f6e20696e707574206d7573742060448201527f706f696e7420746f207468652077616c6c65742773206d61696e205554584f0060648201526084016101a9565b60016011880160008735611ae460408a0160208b01613765565b604051602001611b0b92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080611b7685612363565b90925090506000611b888360016136bc565b6040517f1976a9140000000000000000000000000000000000000000000000000000000060208201526001600160601b03198716602482015261222b60f21b6038820152909150600090603a0160408051601f198184030181529082905280516020918201207f1600140000000000000000000000000000000000000000000000000000000000918301919091526001600160601b0319881660238301529150600090603701604051602081830303815290604052805190602001209050611c7289898960405180608001604052808881526020018981526020018781526020018681525061237a565b9998505050505050505050565b6001600160601b03198116600090815260148301602052604090206001810154611cb257611cad8383612585565b611d41565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffff9091161770020000000000000000000000000000000017905580546040516001600160601b0319841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601383015460601b6001600160601b03199081169083161415611207575050601301805473ffffffffffffffffffffffffffffffffffffffff19169055565b606081611d9c57506040805160208101909152600081526118e7565b6000611da883856136bc565b90508381118015611dba575080855110155b611e065760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101a9565b604051915082604083010160405282825283850182038460208701018481015b80821015611e3f57815183830152602082019150611e26565b505050509392505050565b6000611e598383016020015190565b90505b92915050565b6000806000611e7084612363565b9092509050801580611e83575060001982145b15611e92575060009392505050565b6000611e9f8360016136bc565b905060005b82811015611f055785518210611ec05750600095945050505050565b6000611ecc878461268e565b9050600019811415611ee5575060009695505050505050565b611eef81846136bc565b9250508080611efd906139d8565b915050611ea4565b5093519093149392505050565b6000806000611f2084612363565b9092509050801580611f33575060001982145b15611f42575060009392505050565b6000611f4f8360016136bc565b905060005b82811015611f055785518210611f705750600095945050505050565b6000611f7c87846126d9565b9050600019811415611f95575060009695505050505050565b611f9f81846136bc565b9250508080611fad906139d8565b915050611f54565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6044810151600090611e5c565b60008385148015611ff8575081155b801561200357508251155b156120105750600161130c565b61201c8584868561273f565b95945050505050565b600080612039612034856127e7565b61287c565b835190915081141561204e57825191506120d4565b826020015181141561206657826020015191506120d4565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c747900000000000000000000000000000000000000000000000000000060648201526084016101a9565b60006120df856128a4565b90506000198114156121595760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e000000000000000000000000000000000000000000000000000000000060648201526084016101a9565b6001198114156121ab5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e000000000000000000000060448201526064016101a9565b6002198114156121fd5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e20612068656164657200000060448201526064016101a9565b604084015161220c90846139f3565b8110156122815760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e0000000000000000000000000060648201526084016101a9565b5050505050565b600080600061229684612363565b9150508060011461230f5760405162461bcd60e51b815260206004820152602d60248201527f4f7574626f756e64207472616e73616374696f6e206d7573742068617665206160448201527f2073696e676c6520696e7075740000000000000000000000000000000000000060648201526084016101a9565b600061231b8582612aab565b905061232681612c91565b935061235a61233482612c9e565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b92505050915091565b600080612371836000612cab565b91509150915091565b604080516080810182526000808252602082018190529181018290526060810182905290805b83602001518110156125055783516000906123bc9088906126d9565b85519091506000906123d090899084611d80565b905060006123dd82612e29565b905060006123fb60088085516123f3919061393c565b859190611d80565b9050866060015167ffffffffffffffff166000148015612437575060408801518151602083012014806124375750606088015181516020830120145b801561244d575060008267ffffffffffffffff16115b156124735763ffffffff8516604088015267ffffffffffffffff821660608801526124d6565b6000806124828d8c8587612ea0565b9150915081896000018181516124989190613807565b67ffffffffffffffff169052506020890180518291906124b9908390613807565b67ffffffffffffffff16905250876124d0816139d8565b98505050505b83886000018181516124e891906136bc565b9052508493506124fd92508391506139d89050565b9150506123a0565b506000811161257c5760405162461bcd60e51b815260206004820152603b60248201527f526564656d7074696f6e207472616e73616374696f6e206d7573742070726f6360448201527f657373206174206c65617374206f6e6520726564656d7074696f6e000000000060648201526084016101a9565b50949350505050565b6001600160601b0319811660008181526014840160205260408082206002810180547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16700300000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb927916126579160040190815260200190565b600060405180830381600087803b15801561267157600080fd5b505af1158015612685573d6000803e3d6000fd5b50505050505050565b600080600061269d858561322f565b90925090506000198214156126b85760001992505050611e5c565b806126c48360256136bc565b6126ce91906136bc565b61201c9060046136bc565b60006126e68260096136bc565b835110156126f75750600019611e5c565b60008061270e856127098660086136bc565b612cab565b90925090506000198214156127295760001992505050611e5c565b806127358360096136bc565b61201c91906136bc565b60006020845161274f9190613a12565b1561275c5750600061130c565b835161276a5750600061130c565b818560005b86518110156127da57612783600284613a12565b600114156127a8576127a161279b8883016020015190565b83613271565b91506127c1565b6127be826127b98984016020015190565b613271565b91505b60019290921c916127d36020826136bc565b905061276f565b5090931495945050505050565b6000806127f5836048611e4a565b60e81c9050600083604b8151811061280f5761280f6138de565b016020015160f81c9050600061284383600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff1690506000612857600384613919565b60ff16905061286881610100613b0a565b61287290836139f3565b9695505050505050565b6000611e5c7bffff00000000000000000000000000000000000000000000000000008361327d565b6000605082516128b49190613a12565b156128c25750600019919050565b506040805160808101909152605081526000908190815b8451811015612aa3576128ed858383613289565b801561290d576128fd8284613328565b61290d5750600119949350505050565b6000612918836127e7565b905061292383611fb5565b935080612a678560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b1115612a7a575060021995945050505050565b612a8d612a868261287c565b8690613351565b9450612a9c90506050826136bc565b90506128d9565b505050919050565b6060600080612ab985612363565b9092509050600019821415612b365760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016101a9565b808410612b855760405162461bcd60e51b815260206004820152601060248201527f56696e2072656164206f76657272756e0000000000000000000000000000000060448201526064016101a9565b600080612b938460016136bc565b905060005b86811015612c1c57612baa888361268e565b9250600019831415612bfe5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e2073637269707453696700000000000000000060448201526064016101a9565b612c0883836136bc565b915080612c14816139d8565b915050612b98565b50612c27878261268e565b9150600019821415612c7b5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e2073637269707453696700000000000000000060448201526064016101a9565b612c86878284611d80565b979650505050505050565b6020810151600090611e5c565b6000611e5c826020611e4a565b6000806000612cba85856133af565b905060ff8116612cec576000858581518110612cd857612cd86138de565b016020015190935060f81c9150612e229050565b83612cf88260016138f4565b60ff16612d0591906136bc565b85511015612d1c5760001960009250925050612e22565b60008160ff1660021415612d6157612d56612d42612d3b8760016136bc565b8890611e4a565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612e18565b8160ff1660041415612d8b57612d7e612334612d3b8760016136bc565b63ffffffff169050612e18565b8160ff1660081415612e1857612e0b612da8612d3b8760016136bc565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080612e358361343b565b60c01c9050600061130c8264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008060008585604051602001612eb8929190613b16565b60408051808303601f1901815291815281516020928301206000818152600a8b01909352912060010154909150600160801b900463ffffffff1615613075576000818152600a88016020526040812060018101548154919291612f2f9167ffffffffffffffff90811691600160a01b9004166136d4565b600183015490915067ffffffffffffffff80881691612f5c916801000000000000000090910416836136d4565b67ffffffffffffffff1611158015612f8857508067ffffffffffffffff168667ffffffffffffffff1611155b6130205760405162461bcd60e51b815260206004820152604660248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652070656e64696e67207260648201527f6571756573740000000000000000000000000000000000000000000000000000608482015260a4016101a9565b6001918201546000848152600a8b016020526040902080546001600160e01b0319168155909201805473ffffffffffffffffffffffffffffffffffffffff19169055935067ffffffffffffffff169150613225565b6000818152600b8801602052604090206001810154600160801b900463ffffffff166131085760405162461bcd60e51b8152602060048201526024808201527f4f75747075742069732061206e6f6e2d72657175657374656420726564656d7060448201527f74696f6e0000000000000000000000000000000000000000000000000000000060648201526084016101a9565b600181015481546000916131319167ffffffffffffffff91821691600160a01b909104166136d4565b600183015490915067ffffffffffffffff8088169161315e916801000000000000000090910416836136d4565b67ffffffffffffffff161115801561318a57508067ffffffffffffffff168667ffffffffffffffff1611155b6132225760405162461bcd60e51b815260206004820152604860248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652074696d6564206f757460648201527f2072657175657374000000000000000000000000000000000000000000000000608482015260a4016101a9565b50505b5094509492505050565b60008061323d8360256136bc565b84511015613252575060001990506000612e22565b600080613264866127098760246136bc565b9097909650945050505050565b6000611e598383613447565b6000611e598284613b6d565b8151600061329782846136bc565b905082811180156132a9575080855110155b6132f55760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101a9565b826020860101602085018382015b8083101561331e578251825260209283019290910190613303565b5050505050505050565b60008061333484613475565b9050828114613347576000915050611e5c565b5060019392505050565b600061335d82846136bc565b905082811015611e5c5760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e0000000000000060448201526064016101a9565b60008282815181106133c3576133c36138de565b60209101015160f81c60ff14156133dc57506008611e5c565b8282815181106133ee576133ee6138de565b60209101015160f81c60fe141561340757506004611e5c565b828281518110613419576134196138de565b60209101015160f81c60fd141561343257506002611e5c565b50600092915050565b6000611e5c8282611e4a565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6024810151600090611e5c565b80356001600160601b03198116811461349a57600080fd5b919050565b60008083601f8401126134b157600080fd5b50813567ffffffffffffffff8111156134c957600080fd5b602083019150836020828501011115612e2257600080fd5b600080600080606085870312156134f757600080fd5b8435935061350760208601613482565b9250604085013567ffffffffffffffff81111561352357600080fd5b61352f8782880161349f565b95989497509550505050565b60006060828403121561354d57600080fd5b50919050565b803567ffffffffffffffff8116811461349a57600080fd5b60008060008060008060e0878903121561358457600080fd5b8635955061359460208801613482565b94506135a3886040890161353b565b935060a087013567ffffffffffffffff8111156135bf57600080fd5b6135cb89828a0161349f565b90945092506135de905060c08801613553565b90509295509295509295565b600080600080600060e0868803121561360257600080fd5b85359450602086013567ffffffffffffffff8082111561362157600080fd5b908701906080828a03121561363557600080fd5b9094506040870135908082111561364b57600080fd5b506136588882890161353b565b935050613668876060880161353b565b915061367660c08701613482565b90509295509295909350565b6001600160601b031984168152818360148301376000910160140190815292915050565b634e487b7160e01b600052601160045260246000fd5b600082198211156136cf576136cf6136a6565b500190565b600067ffffffffffffffff838116908316818110156136f5576136f56136a6565b039392505050565b634e487b7160e01b600052602160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6bffffffffffffffffffffffff198416815260406020820152600061201c604083018486613713565b60006020828403121561377757600080fd5b813563ffffffff811681146118e757600080fd5b60006020828403121561379d57600080fd5b611e5982613553565b6001600160c01b031984168152818360088301376000910160080190815292915050565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806137fb576137fb6137ca565b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561382a5761382a6136a6565b01949350505050565b6bffffffffffffffffffffffff198816815260c06020820152600061385c60c08301888a613713565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152918316608083015290911660a0909101529392505050565b6000808335601e198436030181126138ae57600080fd5b83018035915067ffffffffffffffff8211156138c957600080fd5b602001915036819003821315612e2257600080fd5b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115613911576139116136a6565b019392505050565b600060ff821660ff841680821015613933576139336136a6565b90039392505050565b60008282101561394e5761394e6136a6565b500390565b60006020828403121561396557600080fd5b5051919050565b60006020828403121561397e57600080fd5b81356001600160e01b0319811681146118e757600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b60006000198214156139ec576139ec6136a6565b5060010190565b6000816000190483118215151615613a0d57613a0d6136a6565b500290565b600082613a2157613a216137ca565b500690565b600181815b80851115613a61578160001904821115613a4757613a476136a6565b80851615613a5457918102915b93841c9390800290613a2b565b509250929050565b600082613a7857506001611e5c565b81613a8557506000611e5c565b8160018114613a9b5760028114613aa557613ac1565b6001915050611e5c565b60ff841115613ab657613ab66136a6565b50506001821b611e5c565b5060208310610133831016604e8410600b8410161715613ae4575081810a611e5c565b613aee8383613a26565b8060001904821115613b0257613b026136a6565b029392505050565b6000611e598383613a69565b6bffffffffffffffffffffffff19831681526000825160005b81811015613b4c5760208186018101516014868401015201613b2f565b81811115613b5e576000601483860101525b50919091016014019392505050565b600082613b7c57613b7c6137ca565b50049056fea2646970667358221220e2754dd3942d44f1ef7d5cc2b64516899d95d823930248070fd95d29ff22e6dc64736f6c63430008090033",
|
|
89
|
-
"deployedBytecode": "0x730000000000000000000000000000000000000000301460806040526004361061004b5760003560e01c806313d0c668146100505780637333b36914610072578063a164de6e14610092575b600080fd5b81801561005c57600080fd5b5061007061006b3660046134e1565b6100b2565b005b81801561007e57600080fd5b5061007061008d36600461356b565b6105be565b81801561009e57600080fd5b506100706100ad3660046135ea565b610d71565b60008383836040516020016100c993929190613682565b60408051808303601f1901815282825280516020918201206000818152600a8a01835283902060a08501845280546001600160a01b0381168652600160a01b900467ffffffffffffffff9081169386019390935260010154808316938501939093526801000000000000000083049091166060840152600160801b90910463ffffffff16608083018190529092506101b25760405162461bcd60e51b815260206004820152602160248201527f526564656d7074696f6e207265717565737420646f6573206e6f7420657869736044820152601d60fa1b60648201526084015b60405180910390fd5b428660090154826080015163ffffffff166101cd91906136bc565b1061023f5760405162461bcd60e51b8152602060048201526024808201527f526564656d7074696f6e207265717565737420686173206e6f742074696d656460448201527f206f75740000000000000000000000000000000000000000000000000000000060648201526084016101a9565b6001600160601b031985166000908152601487016020908152604091829020918301519083015161027091906136d4565b60028201805460009061028e90849067ffffffffffffffff166136d4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600160048111156102c7576102c76136fd565b6002820154600160801b900460ff1660048111156102e7576102e76136fd565b14806103115750600280820154600160801b900460ff16600481111561030f5761030f6136fd565b145b8061033b575060046002820154600160801b900460ff166004811115610339576103396136fd565b145b6103ad5760405162461bcd60e51b815260206004820152603b60248201527f5468652077616c6c6574206d75737420626520696e204c6976652c204d6f766960448201527f6e6746756e6473206f72205465726d696e61746564207374617465000000000060648201526084016101a9565b6000838152600b88016020908152604080832085518154878501516001600160a01b039092166001600160e01b031991821617600160a01b67ffffffffffffffff93841602178355878401516001938401805460608b015160808c01519386167fffffffffffffffffffffffffffffffff0000000000000000000000000000000090921691909117680100000000000000009190951602939093177fffffffffffffffffffffffff00000000ffffffffffffffffffffffffffffffff16600160801b63ffffffff9092169190910217909155600a8c019093529220805490911681558101805473ffffffffffffffffffffffffffffffffffffffff191690556002820154600160801b900460ff1660048111156104cc576104cc6136fd565b14806104f65750600280820154600160801b900460ff1660048111156104f4576104f46136fd565b145b15610505576105058787611117565b7f013dddc8debc4730cd01232fdcea9ae6013689837732356c187fe5edb9a8a8d58686866040516105389392919061373c565b60405180910390a18654825160208401516040516356a6d9ef60e01b81526001600160a01b03928316600482015267ffffffffffffffff90911660248201529116906356a6d9ef90604401600060405180830381600087803b15801561059d57600080fd5b505af11580156105b1573d6000803e3d6000fd5b5050505050505050505050565b6001600160601b031985166000908152601487016020526040902060016002820154600160801b900460ff1660048111156105fb576105fb6136fd565b146106485760405162461bcd60e51b815260206004820152601c60248201527f57616c6c6574206d75737420626520696e204c6976652073746174650000000060448201526064016101a9565b6001810154806106a45760405162461bcd60e51b815260206004820152602160248201527f4e6f206d61696e205554584f20666f722074686520676976656e2077616c6c656044820152601d60fa1b60648201526084016101a9565b8086356106b76040890160208a01613765565b6106c760608a0160408b0161378b565b6040516020016107049392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60405160208183030381529060405280519060200120146107675760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101a9565b6000610799600060c01b8787604051602001610785939291906137a6565b60405160208183030381529060405261120c565b905060008151116108125760405162461bcd60e51b815260206004820152602e60248201527f52656465656d6572206f757470757420736372697074206d757374206265206160448201527f207374616e64617264207479706500000000000000000000000000000000000060648201526084016101a9565b80805190602001208860405160200161083b91906001600160601b031991909116815260140190565b6040516020818303038152906040528051906020012014156108c55760405162461bcd60e51b815260206004820152603760248201527f52656465656d6572206f757470757420736372697074206d757374206e6f742060448201527f706f696e7420746f207468652077616c6c657420504b4800000000000000000060648201526084016101a9565b600889015467ffffffffffffffff68010000000000000000909104811690851610156109335760405162461bcd60e51b815260206004820152601b60248201527f526564656d7074696f6e20616d6f756e7420746f6f20736d616c6c000000000060448201526064016101a9565b600088878760405160200161094a93929190613682565b60408051808303601f1901815291815281516020928301206000818152600a8e01909352912060010154909150600160801b900463ffffffff1615610a1d5760405162461bcd60e51b815260206004820152604a60248201527f546865726520697320612070656e64696e6720726564656d7074696f6e20726560448201527f71756573742066726f6d20746869732077616c6c657420746f2074686520736160648201527f6d65206164647265737300000000000000000000000000000000000000000000608482015260a4016101a9565b60088a0154600090600160801b900467ffffffffffffffff16610a41576000610a61565b60088b0154610a6190600160801b900467ffffffffffffffff16876137e0565b60088c01549091507801000000000000000000000000000000000000000000000000900467ffffffffffffffff16610a9982886136d4565b600287018054600090610ab790849067ffffffffffffffff16613807565b82546101009290920a67ffffffffffffffff8181021990931691831602179091556002880154169050610af060608c0160408d0161378b565b67ffffffffffffffff161015610b485760405162461bcd60e51b815260206004820152601960248201527f496e73756666696369656e742077616c6c65742066756e64730000000000000060448201526064016101a9565b6040518060a00160405280336001600160a01b031681526020018867ffffffffffffffff1681526020018367ffffffffffffffff1681526020018267ffffffffffffffff1681526020014263ffffffff168152508c600a01600085815260200190815260200160002060008201518160000160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555060208201518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060408201518160010160006101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060608201518160010160086101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060808201518160010160106101000a81548163ffffffff021916908363ffffffff1602179055509050507f97a0199072f487232635d50ab75860891afe0b91c976ed2fc76502c4d82d0d958b8a8a338b8787604051610cd09796959493929190613833565b60405180910390a18b546040517f7c6db49c00000000000000000000000000000000000000000000000000000000815233600482015230602482015267ffffffffffffffff891660448201526001600160a01b0390911690637c6db49c90606401600060405180830381600087803b158015610d4b57600080fd5b505af1158015610d5f573d6000803e3d6000fd5b50505050505050505050505050505050565b6000610d868585610d81896114b2565b6115fd565b9050610dd786610d996020880188613897565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508892508791506118ee9050565b6001600160601b03198216600090815260148701602052604090206002810154600160801b900460ff166001816004811115610e1557610e156136fd565b1480610e3257506002816004811115610e3057610e306136fd565b145b610ea45760405162461bcd60e51b815260206004820152602b60248201527f57616c6c6574206d75737420626520696e204c697665206f72204d6f76696e6760448201527f46756e647320737461746500000000000000000000000000000000000000000060648201526084016101a9565b6000610ef389610eb760408b018b613897565b8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611b48915050565b606081015190915067ffffffffffffffff1615610f74578381604001518260600151604051602001610f529392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b60408051601f1981840301815291905280516020909101206001840155610f7c565b600060018401555b8051600284018054600090610f9c90849067ffffffffffffffff166136d4565b92506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055507fa45596c10f758d32ec8cca64a0fbfe776052b08fdb3f026e0a87f52118bf8fbe85856040516110089291906001600160601b0319929092168252602082015260400190565b60405180910390a1885481516040517f392aee4300000000000000000000000000000000000000000000000000000000815267ffffffffffffffff90911660048201526001600160a01b039091169063392aee4390602401600060405180830381600087803b15801561107a57600080fd5b505af115801561108e573d6000803e3d6000fd5b50508a546004808d015460208601516040516356a6d9ef60e01b81526001600160a01b039283169381019390935267ffffffffffffffff16602483015290911692506356a6d9ef9150604401600060405180830381600087803b1580156110f457600080fd5b505af1158015611108573d6000803e3d6000fd5b50505050505050505050505050565b6001600160601b031981166000908152601483016020526040902060020154600160801b900460ff166001816004811115611154576111546136fd565b14806111715750600281600481111561116f5761116f6136fd565b145b6111e35760405162461bcd60e51b815260206004820152603160248201527f45434453412077616c6c6574206d75737420626520696e204c697665206f722060448201527f4d6f76696e6746756e647320737461746500000000000000000000000000000060648201526084016101a9565b60018160048111156111f7576111f76136fd565b1415611207576112078383611c7f565b505050565b6060600082600881518110611223576112236138de565b0160200151835160f89190911c915061123d8260096138f4565b60ff161461125b575050604080516020810190915260008152919050565b8260098151811061126e5761126e6138de565b016020015160f81c6113145760028160ff16101561129c575050604080516020810190915260008152919050565b600083600a815181106112b1576112b16138de565b016020015160f81c90506112c6600283613919565b60ff16811415806112e45750806020141580156112e4575080601414155b1561130057505060408051602081019091526000815292915050565b61130c84600b83611d80565b949350505050565b6000611321846008611e4a565b90507f1976a900000000000000000000000000000000000000000000000000000000007fffffff0000000000000000000000000000000000000000000000000000000000821614156113fe5783600b81518110611380576113806138de565b60209101015160f81c60141415806113d557506113ab600285516113a4919061393c565b8590611e4a565b7dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff191661222b60f21b14155b156113f157505060408051602081019091526000815292915050565b61130c84600c6014611d80565b7f17a91400000000000000000000000000000000000000000000000000000000007fffffff00000000000000000000000000000000000000000000000000000000008216141561149b578360018551611457919061393c565b81518110611467576114676138de565b60209101015160f81c60871461148e57505060408051602081019091526000815292915050565b61130c84600b6014611d80565b505050604080516020810190915260008152919050565b6114d660405180606001604052806000815260200160008152602001600081525090565b6001820154604080517f113764be00000000000000000000000000000000000000000000000000000000815290516001600160a01b0390921691829163113764be916004808301926020929190829003018186803b15801561153757600080fd5b505afa15801561154b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061156f9190613953565b826000018181525050806001600160a01b0316632b97be246040518163ffffffff1660e01b815260040160206040518083038186803b1580156115b157600080fd5b505afa1580156115c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115e99190613953565b602083015250600390910154604082015290565b600061164961160f6020860186613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611e6292505050565b6116955760405162461bcd60e51b815260206004820152601d60248201527f496e76616c696420696e70757420766563746f722070726f766964656400000060448201526064016101a9565b6116df6116a56040860186613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611f1292505050565b61172b5760405162461bcd60e51b815260206004820152601e60248201527f496e76616c6964206f757470757420766563746f722070726f7669646564000060448201526064016101a9565b61178e61173b602086018661396c565b6117486020870187613897565b6117556040890189613897565b61176560808b0160608c0161396c565b60405160200161177a96959493929190613996565b604051602081830303815290604052611fb5565b90506118296117dd6117a36040860186613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250611fdc92505050565b6117e78580613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869493925050506020870135611fe9565b61189b5760405162461bcd60e51b815260206004820152603c60248201527f5478206d65726b6c652070726f6f66206973206e6f742076616c696420666f7260448201527f2070726f76696465642068656164657220616e6420747820686173680000000060648201526084016101a9565b6118e76118ab6040850185613897565b8080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250869250612025915050565b9392505050565b6001600160601b0319811660009081526014850160205260409020600101548061195a5760405162461bcd60e51b815260206004820152601d60248201527f4e6f206d61696e205554584f20666f7220676976656e2077616c6c657400000060448201526064016101a9565b80833561196d6040860160208701613765565b61197d606087016040880161378b565b6040516020016119ba9392919092835260e09190911b6001600160e01b031916602083015260c01b6001600160c01b0319166024820152602c0190565b6040516020818303038152906040528051906020012014611a1d5760405162461bcd60e51b815260206004820152601660248201527f496e76616c6964206d61696e205554584f20646174610000000000000000000060448201526064016101a9565b600080611a2986612288565b9092509050843582148015611a58575063ffffffff8116611a506040870160208801613765565b63ffffffff16145b611aca5760405162461bcd60e51b815260206004820152603f60248201527f4f7574626f756e64207472616e73616374696f6e20696e707574206d7573742060448201527f706f696e7420746f207468652077616c6c65742773206d61696e205554584f0060648201526084016101a9565b60016011880160008735611ae460408a0160208b01613765565b604051602001611b0b92919091825260e01b6001600160e01b031916602082015260240190565b60408051808303601f19018152918152815160209283012083529082019290925201600020805460ff191691151591909117905550505050505050565b60408051608081018252600080825260208201819052918101829052606081018290529080611b7685612363565b90925090506000611b888360016136bc565b6040517f1976a9140000000000000000000000000000000000000000000000000000000060208201526001600160601b03198716602482015261222b60f21b6038820152909150600090603a0160408051601f198184030181529082905280516020918201207f1600140000000000000000000000000000000000000000000000000000000000918301919091526001600160601b0319881660238301529150600090603701604051602081830303815290604052805190602001209050611c7289898960405180608001604052808881526020018981526020018781526020018681525061237a565b9998505050505050505050565b6001600160601b03198116600090815260148301602052604090206001810154611cb257611cad8383612585565b611d41565b60028101805463ffffffff42166c01000000000000000000000000027fffffffffffffffffffffffffffffff0000000000ffffffffffffffffffffffff9091161770020000000000000000000000000000000017905580546040516001600160601b0319841691907fbdc9ce990a067e5fd3a5d8dfc68e27e9f221aaa3fe55265e0b7e93c460b3efe290600090a35b601383015460601b6001600160601b03199081169083161415611207575050601301805473ffffffffffffffffffffffffffffffffffffffff19169055565b606081611d9c57506040805160208101909152600081526118e7565b6000611da883856136bc565b90508381118015611dba575080855110155b611e065760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101a9565b604051915082604083010160405282825283850182038460208701018481015b80821015611e3f57815183830152602082019150611e26565b505050509392505050565b6000611e598383016020015190565b90505b92915050565b6000806000611e7084612363565b9092509050801580611e83575060001982145b15611e92575060009392505050565b6000611e9f8360016136bc565b905060005b82811015611f055785518210611ec05750600095945050505050565b6000611ecc878461268e565b9050600019811415611ee5575060009695505050505050565b611eef81846136bc565b9250508080611efd906139d8565b915050611ea4565b5093519093149392505050565b6000806000611f2084612363565b9092509050801580611f33575060001982145b15611f42575060009392505050565b6000611f4f8360016136bc565b905060005b82811015611f055785518210611f705750600095945050505050565b6000611f7c87846126d9565b9050600019811415611f95575060009695505050505050565b611f9f81846136bc565b9250508080611fad906139d8565b915050611f54565b60006020600083516020850160025afa50602060006020600060025afa5050600051919050565b6044810151600090611e5c565b60008385148015611ff8575081155b801561200357508251155b156120105750600161130c565b61201c8584868561273f565b95945050505050565b600080612039612034856127e7565b61287c565b835190915081141561204e57825191506120d4565b826020015181141561206657826020015191506120d4565b60405162461bcd60e51b815260206004820152602560248201527f4e6f742061742063757272656e74206f722070726576696f757320646966666960448201527f63756c747900000000000000000000000000000000000000000000000000000060648201526084016101a9565b60006120df856128a4565b90506000198114156121595760405162461bcd60e51b815260206004820152602360248201527f496e76616c6964206c656e677468206f6620746865206865616465727320636860448201527f61696e000000000000000000000000000000000000000000000000000000000060648201526084016101a9565b6001198114156121ab5760405162461bcd60e51b815260206004820152601560248201527f496e76616c6964206865616465727320636861696e000000000000000000000060448201526064016101a9565b6002198114156121fd5760405162461bcd60e51b815260206004820152601d60248201527f496e73756666696369656e7420776f726b20696e20612068656164657200000060448201526064016101a9565b604084015161220c90846139f3565b8110156122815760405162461bcd60e51b815260206004820152603360248201527f496e73756666696369656e7420616363756d756c61746564206469666669637560448201527f6c747920696e2068656164657220636861696e0000000000000000000000000060648201526084016101a9565b5050505050565b600080600061229684612363565b9150508060011461230f5760405162461bcd60e51b815260206004820152602d60248201527f4f7574626f756e64207472616e73616374696f6e206d7573742068617665206160448201527f2073696e676c6520696e7075740000000000000000000000000000000000000060648201526084016101a9565b600061231b8582612aab565b905061232681612c91565b935061235a61233482612c9e565b60d881901c63ff00ff001662ff00ff60e89290921c9190911617601081811b91901c1790565b92505050915091565b600080612371836000612cab565b91509150915091565b604080516080810182526000808252602082018190529181018290526060810182905290805b83602001518110156125055783516000906123bc9088906126d9565b85519091506000906123d090899084611d80565b905060006123dd82612e29565b905060006123fb60088085516123f3919061393c565b859190611d80565b9050866060015167ffffffffffffffff166000148015612437575060408801518151602083012014806124375750606088015181516020830120145b801561244d575060008267ffffffffffffffff16115b156124735763ffffffff8516604088015267ffffffffffffffff821660608801526124d6565b6000806124828d8c8587612ea0565b9150915081896000018181516124989190613807565b67ffffffffffffffff169052506020890180518291906124b9908390613807565b67ffffffffffffffff16905250876124d0816139d8565b98505050505b83886000018181516124e891906136bc565b9052508493506124fd92508391506139d89050565b9150506123a0565b506000811161257c5760405162461bcd60e51b815260206004820152603b60248201527f526564656d7074696f6e207472616e73616374696f6e206d7573742070726f6360448201527f657373206174206c65617374206f6e6520726564656d7074696f6e000000000060648201526084016101a9565b50949350505050565b6001600160601b0319811660008181526014840160205260408082206002810180547fffffffffffffffffffffffffffffff00ffffffffffffffffffffffffffffffff16700300000000000000000000000000000000179055805491519093927f47b159947c3066cb253f60e8f046cfd747411788a545cb189679e3fa1467b28d91a3600283015481546040517f343bb9270000000000000000000000000000000000000000000000000000000081526001600160a01b039092169163343bb927916126579160040190815260200190565b600060405180830381600087803b15801561267157600080fd5b505af1158015612685573d6000803e3d6000fd5b50505050505050565b600080600061269d858561322f565b90925090506000198214156126b85760001992505050611e5c565b806126c48360256136bc565b6126ce91906136bc565b61201c9060046136bc565b60006126e68260096136bc565b835110156126f75750600019611e5c565b60008061270e856127098660086136bc565b612cab565b90925090506000198214156127295760001992505050611e5c565b806127358360096136bc565b61201c91906136bc565b60006020845161274f9190613a12565b1561275c5750600061130c565b835161276a5750600061130c565b818560005b86518110156127da57612783600284613a12565b600114156127a8576127a161279b8883016020015190565b83613271565b91506127c1565b6127be826127b98984016020015190565b613271565b91505b60019290921c916127d36020826136bc565b905061276f565b5090931495945050505050565b6000806127f5836048611e4a565b60e81c9050600083604b8151811061280f5761280f6138de565b016020015160f81c9050600061284383600060108262ffffff16901c8261ff001660108462ffffff16901b17179050919050565b62ffffff1690506000612857600384613919565b60ff16905061286881610100613b0a565b61287290836139f3565b9695505050505050565b6000611e5c7bffff00000000000000000000000000000000000000000000000000008361327d565b6000605082516128b49190613a12565b156128c25750600019919050565b506040805160808101909152605081526000908190815b8451811015612aa3576128ed858383613289565b801561290d576128fd8284613328565b61290d5750600119949350505050565b6000612918836127e7565b905061292383611fb5565b935080612a678560008190506008817eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff16901b600882901c7eff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff00ff161790506010817dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff16901b601082901c7dffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff0000ffff161790506020817bffffffff00000000ffffffff00000000ffffffff00000000ffffffff16901b602082901c7bffffffff00000000ffffffff00000000ffffffff00000000ffffffff1617905060408177ffffffffffffffff0000000000000000ffffffffffffffff16901b604082901c77ffffffffffffffff0000000000000000ffffffffffffffff16179050608081901b608082901c179050919050565b1115612a7a575060021995945050505050565b612a8d612a868261287c565b8690613351565b9450612a9c90506050826136bc565b90506128d9565b505050919050565b6060600080612ab985612363565b9092509050600019821415612b365760405162461bcd60e51b815260206004820152602260248201527f52656164206f76657272756e20647572696e6720566172496e7420706172736960448201527f6e6700000000000000000000000000000000000000000000000000000000000060648201526084016101a9565b808410612b855760405162461bcd60e51b815260206004820152601060248201527f56696e2072656164206f76657272756e0000000000000000000000000000000060448201526064016101a9565b600080612b938460016136bc565b905060005b86811015612c1c57612baa888361268e565b9250600019831415612bfe5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e2073637269707453696700000000000000000060448201526064016101a9565b612c0883836136bc565b915080612c14816139d8565b915050612b98565b50612c27878261268e565b9150600019821415612c7b5760405162461bcd60e51b815260206004820152601760248201527f42616420566172496e7420696e2073637269707453696700000000000000000060448201526064016101a9565b612c86878284611d80565b979650505050505050565b6020810151600090611e5c565b6000611e5c826020611e4a565b6000806000612cba85856133af565b905060ff8116612cec576000858581518110612cd857612cd86138de565b016020015190935060f81c9150612e229050565b83612cf88260016138f4565b60ff16612d0591906136bc565b85511015612d1c5760001960009250925050612e22565b60008160ff1660021415612d6157612d56612d42612d3b8760016136bc565b8890611e4a565b62ffff0060e882901c1660f89190911c1790565b61ffff169050612e18565b8160ff1660041415612d8b57612d7e612334612d3b8760016136bc565b63ffffffff169050612e18565b8160ff1660081415612e1857612e0b612da8612d3b8760016136bc565b60c01c64ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b67ffffffffffffffff1690505b60ff909116925090505b9250929050565b600080612e358361343b565b60c01c9050600061130c8264ff000000ff600882811c91821665ff000000ff009390911b92831617601090811b67ffffffffffffffff1666ff00ff00ff00ff9290921667ff00ff00ff00ff009093169290921790911c65ffff0000ffff1617602081811c91901b1790565b60008060008585604051602001612eb8929190613b16565b60408051808303601f1901815291815281516020928301206000818152600a8b01909352912060010154909150600160801b900463ffffffff1615613075576000818152600a88016020526040812060018101548154919291612f2f9167ffffffffffffffff90811691600160a01b9004166136d4565b600183015490915067ffffffffffffffff80881691612f5c916801000000000000000090910416836136d4565b67ffffffffffffffff1611158015612f8857508067ffffffffffffffff168667ffffffffffffffff1611155b6130205760405162461bcd60e51b815260206004820152604660248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652070656e64696e67207260648201527f6571756573740000000000000000000000000000000000000000000000000000608482015260a4016101a9565b6001918201546000848152600a8b016020526040902080546001600160e01b0319168155909201805473ffffffffffffffffffffffffffffffffffffffff19169055935067ffffffffffffffff169150613225565b6000818152600b8801602052604090206001810154600160801b900463ffffffff166131085760405162461bcd60e51b8152602060048201526024808201527f4f75747075742069732061206e6f6e2d72657175657374656420726564656d7060448201527f74696f6e0000000000000000000000000000000000000000000000000000000060648201526084016101a9565b600181015481546000916131319167ffffffffffffffff91821691600160a01b909104166136d4565b600183015490915067ffffffffffffffff8088169161315e916801000000000000000090910416836136d4565b67ffffffffffffffff161115801561318a57508067ffffffffffffffff168667ffffffffffffffff1611155b6132225760405162461bcd60e51b815260206004820152604860248201527f4f75747075742076616c7565206973206e6f742077697468696e20746865206160448201527f636365707461626c652072616e6765206f66207468652074696d6564206f757460648201527f2072657175657374000000000000000000000000000000000000000000000000608482015260a4016101a9565b50505b5094509492505050565b60008061323d8360256136bc565b84511015613252575060001990506000612e22565b600080613264866127098760246136bc565b9097909650945050505050565b6000611e598383613447565b6000611e598284613b6d565b8151600061329782846136bc565b905082811180156132a9575080855110155b6132f55760405162461bcd60e51b815260206004820152601360248201527f536c696365206f7574206f6620626f756e64730000000000000000000000000060448201526064016101a9565b826020860101602085018382015b8083101561331e578251825260209283019290910190613303565b5050505050505050565b60008061333484613475565b9050828114613347576000915050611e5c565b5060019392505050565b600061335d82846136bc565b905082811015611e5c5760405162461bcd60e51b815260206004820152601960248201527f4f766572666c6f7720647572696e67206164646974696f6e2e0000000000000060448201526064016101a9565b60008282815181106133c3576133c36138de565b60209101015160f81c60ff14156133dc57506008611e5c565b8282815181106133ee576133ee6138de565b60209101015160f81c60fe141561340757506004611e5c565b828281518110613419576134196138de565b60209101015160f81c60fd141561343257506002611e5c565b50600092915050565b6000611e5c8282611e4a565b60008260005281602052602060006040600060025afa50602060006020600060025afa505060005192915050565b6024810151600090611e5c565b80356001600160601b03198116811461349a57600080fd5b919050565b60008083601f8401126134b157600080fd5b50813567ffffffffffffffff8111156134c957600080fd5b602083019150836020828501011115612e2257600080fd5b600080600080606085870312156134f757600080fd5b8435935061350760208601613482565b9250604085013567ffffffffffffffff81111561352357600080fd5b61352f8782880161349f565b95989497509550505050565b60006060828403121561354d57600080fd5b50919050565b803567ffffffffffffffff8116811461349a57600080fd5b60008060008060008060e0878903121561358457600080fd5b8635955061359460208801613482565b94506135a3886040890161353b565b935060a087013567ffffffffffffffff8111156135bf57600080fd5b6135cb89828a0161349f565b90945092506135de905060c08801613553565b90509295509295509295565b600080600080600060e0868803121561360257600080fd5b85359450602086013567ffffffffffffffff8082111561362157600080fd5b908701906080828a03121561363557600080fd5b9094506040870135908082111561364b57600080fd5b506136588882890161353b565b935050613668876060880161353b565b915061367660c08701613482565b90509295509295909350565b6001600160601b031984168152818360148301376000910160140190815292915050565b634e487b7160e01b600052601160045260246000fd5b600082198211156136cf576136cf6136a6565b500190565b600067ffffffffffffffff838116908316818110156136f5576136f56136a6565b039392505050565b634e487b7160e01b600052602160045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b6bffffffffffffffffffffffff198416815260406020820152600061201c604083018486613713565b60006020828403121561377757600080fd5b813563ffffffff811681146118e757600080fd5b60006020828403121561379d57600080fd5b611e5982613553565b6001600160c01b031984168152818360088301376000910160080190815292915050565b634e487b7160e01b600052601260045260246000fd5b600067ffffffffffffffff808416806137fb576137fb6137ca565b92169190910492915050565b600067ffffffffffffffff80831681851680830382111561382a5761382a6136a6565b01949350505050565b6bffffffffffffffffffffffff198816815260c06020820152600061385c60c08301888a613713565b6001600160a01b039690961660408301525067ffffffffffffffff9384166060820152918316608083015290911660a0909101529392505050565b6000808335601e198436030181126138ae57600080fd5b83018035915067ffffffffffffffff8211156138c957600080fd5b602001915036819003821315612e2257600080fd5b634e487b7160e01b600052603260045260246000fd5b600060ff821660ff84168060ff03821115613911576139116136a6565b019392505050565b600060ff821660ff841680821015613933576139336136a6565b90039392505050565b60008282101561394e5761394e6136a6565b500390565b60006020828403121561396557600080fd5b5051919050565b60006020828403121561397e57600080fd5b81356001600160e01b0319811681146118e757600080fd5b60006001600160e01b03198089168352868860048501378683016004810160008152868882375093169390920160048101939093525050600801949350505050565b60006000198214156139ec576139ec6136a6565b5060010190565b6000816000190483118215151615613a0d57613a0d6136a6565b500290565b600082613a2157613a216137ca565b500690565b600181815b80851115613a61578160001904821115613a4757613a476136a6565b80851615613a5457918102915b93841c9390800290613a2b565b509250929050565b600082613a7857506001611e5c565b81613a8557506000611e5c565b8160018114613a9b5760028114613aa557613ac1565b6001915050611e5c565b60ff841115613ab657613ab66136a6565b50506001821b611e5c565b5060208310610133831016604e8410600b8410161715613ae4575081810a611e5c565b613aee8383613a26565b8060001904821115613b0257613b026136a6565b029392505050565b6000611e598383613a69565b6bffffffffffffffffffffffff19831681526000825160005b81811015613b4c5760208186018101516014868401015201613b2f565b81811115613b5e576000601483860101525b50919091016014019392505050565b600082613b7c57613b7c6137ca565b50049056fea2646970667358221220e2754dd3942d44f1ef7d5cc2b64516899d95d823930248070fd95d29ff22e6dc64736f6c63430008090033",
|
|
90
|
-
"linkReferences": {},
|
|
91
|
-
"deployedLinkReferences": {}
|
|
92
|
-
}
|