From 7081777229275e914c38e88cff13e5309274b902 Mon Sep 17 00:00:00 2001 From: "Sebastijan K." <58827427+sebastijankuzner@users.noreply.github.com> Date: Tue, 26 Nov 2024 10:01:25 +0100 Subject: [PATCH] refactor(contracts): move events, structs and errors inside contracts (#776) * Refactor consensus * Refactor MultiPayment * Refactor usernames * Update abi --- contracts/src/consensus/ConsensusV1.sol | 128 +++++++++--------- contracts/src/multi-payment/MultiPayment.sol | 8 +- contracts/src/usernames/UsernamesV1.sol | 20 +-- contracts/test/consensus/Base.sol | 18 ++- .../test/consensus/Consensus-CalculateTop.sol | 26 ++-- .../consensus/Consensus-GetAllValidators.sol | 4 +- contracts/test/consensus/Consensus-Proxy.sol | 6 +- contracts/test/consensus/Consensus-Rounds.sol | 14 +- .../test/consensus/Consensus-UpdateVoters.sol | 2 +- .../consensus/Consensus-ValidatoUpdate.sol | 35 ++--- .../test/consensus/Consensus-ValidatorAdd.sol | 37 ++--- .../Consensus-ValidatorRegistration.sol | 28 ++-- .../Consensus-ValidatorResignation.sol | 30 ++-- contracts/test/consensus/Consensus-Vote.sol | 74 +++++----- .../test/consensus/Consensus-VoteAdd.sol | 59 ++++---- contracts/test/multi-payment/MultiPayment.sol | 13 +- contracts/test/usernames/Usernames-Proxy.sol | 13 +- contracts/test/usernames/UsernamesV1.sol | 54 ++++---- .../source/abis/ConsensusV1.json | 52 +++---- .../source/abis/MultiPayment.json | 16 +-- .../source/abis/UsernamesV1.json | 20 +-- 21 files changed, 290 insertions(+), 367 deletions(-) diff --git a/contracts/src/consensus/ConsensusV1.sol b/contracts/src/consensus/ConsensusV1.sol index 434ddecfe..d35daa936 100644 --- a/contracts/src/consensus/ConsensusV1.sol +++ b/contracts/src/consensus/ConsensusV1.sol @@ -4,70 +4,6 @@ pragma solidity ^0.8.27; import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -struct ValidatorData { - uint256 votersCount; - uint256 voteBalance; - bool isResigned; - bytes blsPublicKey; // 96 bits -} - -struct Validator { - address addr; - ValidatorData data; -} - -struct RoundValidator { - address addr; - uint256 voteBalance; -} - -struct Round { - uint256 round; - RoundValidator[] validators; -} - -struct Vote { - address validator; - uint256 balance; - address prev; - address next; -} - -struct VoteResult { - address voter; - address validator; -} - -event ValidatorRegistered(address addr, bytes blsPublicKey); - -event ValidatorUpdated(address addr, bytes blsPublicKey); - -event ValidatorResigned(address addr); - -event Voted(address voter, address validator); - -event Unvoted(address voter, address validator); - -error CallerIsNotValidator(); -error ValidatorNotRegistered(); -error ValidatorAlreadyRegistered(); -error ValidatorAlreadyResigned(); -error BellowMinValidators(); -error NoActiveValidators(); - -error BlsKeyAlreadyRegistered(); -error BlsKeyIsInvalid(); - -error VoteResignedValidator(); -error VoteSameValidator(); -error VoteValidatorWithoutBlsPublicKey(); -error AlreadyVoted(); -error MissingVote(); - -error InvalidRange(uint256 min, uint256 max); -error InvalidParameters(); -error ImportIsNotAllowed(); - // Validators: // - Registered -> All validators that are registered including resigned validators // - Active -> Top N validators with the highest vote balance, that participate in the consensus @@ -87,6 +23,70 @@ error ImportIsNotAllowed(); // This process will only work fine if we pass the new wallet balance (88) and keep track of voteBalances in EVM contract. contract ConsensusV1 is UUPSUpgradeable, OwnableUpgradeable { + struct ValidatorData { + uint256 votersCount; + uint256 voteBalance; + bool isResigned; + bytes blsPublicKey; // 96 bits + } + + struct Validator { + address addr; + ValidatorData data; + } + + struct RoundValidator { + address addr; + uint256 voteBalance; + } + + struct Round { + uint256 round; + RoundValidator[] validators; + } + + struct Vote { + address validator; + uint256 balance; + address prev; + address next; + } + + struct VoteResult { + address voter; + address validator; + } + + event ValidatorRegistered(address addr, bytes blsPublicKey); + + event ValidatorUpdated(address addr, bytes blsPublicKey); + + event ValidatorResigned(address addr); + + event Voted(address voter, address validator); + + event Unvoted(address voter, address validator); + + error CallerIsNotValidator(); + error ValidatorNotRegistered(); + error ValidatorAlreadyRegistered(); + error ValidatorAlreadyResigned(); + error BellowMinValidators(); + error NoActiveValidators(); + + error BlsKeyAlreadyRegistered(); + error BlsKeyIsInvalid(); + + error VoteResignedValidator(); + error VoteSameValidator(); + error VoteValidatorWithoutBlsPublicKey(); + error AlreadyVoted(); + error MissingVote(); + + error InvalidRange(uint256 min, uint256 max); + error InvalidParameters(); + error ImportIsNotAllowed(); + mapping(address => ValidatorData) private _validatorsData; mapping(address => bool) private _hasValidator; mapping(bytes32 => bool) private _blsPublicKeys; diff --git a/contracts/src/multi-payment/MultiPayment.sol b/contracts/src/multi-payment/MultiPayment.sol index 77c0f3883..59e86c3cb 100644 --- a/contracts/src/multi-payment/MultiPayment.sol +++ b/contracts/src/multi-payment/MultiPayment.sol @@ -1,11 +1,11 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.27; -error RecipientsAndAmountsMismatch(); -error InvalidValue(); -error FailedToSendEther(); - contract MultiPayment { + error RecipientsAndAmountsMismatch(); + error InvalidValue(); + error FailedToSendEther(); + function pay(address payable[] calldata recipients, uint256[] calldata amounts) public payable { if (recipients.length != amounts.length) { revert RecipientsAndAmountsMismatch(); diff --git a/contracts/src/usernames/UsernamesV1.sol b/contracts/src/usernames/UsernamesV1.sol index 3e758fa40..92b8abc90 100644 --- a/contracts/src/usernames/UsernamesV1.sol +++ b/contracts/src/usernames/UsernamesV1.sol @@ -4,20 +4,20 @@ pragma solidity ^0.8.27; import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; -error InvalidUsername(); -error TakenUsername(); -error UsernameNotRegistered(); +contract UsernamesV1 is UUPSUpgradeable, OwnableUpgradeable { + error InvalidUsername(); + error TakenUsername(); + error UsernameNotRegistered(); -event UsernameRegistered(address addr, string username, string previousUsername); + event UsernameRegistered(address addr, string username, string previousUsername); -event UsernameResigned(address addr, string username); + event UsernameResigned(address addr, string username); -struct User { - address addr; - string username; -} + struct User { + address addr; + string username; + } -contract UsernamesV1 is UUPSUpgradeable, OwnableUpgradeable { mapping(address => string) private _usernames; mapping(bytes32 => bool) private _usernameExists; diff --git a/contracts/test/consensus/Base.sol b/contracts/test/consensus/Base.sol index b3e609e44..7e26311f6 100644 --- a/contracts/test/consensus/Base.sol +++ b/contracts/test/consensus/Base.sol @@ -2,7 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "@forge-std/Test.sol"; -import {ConsensusV1, Validator} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract Base is Test { @@ -27,13 +27,17 @@ contract Base is Test { return prepareBLSKey(addr, 48); } - function sortValidators(Validator[] memory validators) public pure returns (Validator[] memory) { + function sortValidators(ConsensusV1.Validator[] memory validators) + public + pure + returns (ConsensusV1.Validator[] memory) + { uint256 length = validators.length; for (uint256 i = 0; i < length; i++) { for (uint256 j = i + 1; j < length; j++) { // Sort in descending order by votersCount if (_isGreater(validators[i], validators[j])) { - Validator memory temp = validators[i]; + ConsensusV1.Validator memory temp = validators[i]; validators[i] = validators[j]; validators[j] = temp; } @@ -42,7 +46,11 @@ contract Base is Test { return validators; } - function _isGreater(Validator memory validatorA, Validator memory validatorB) internal pure returns (bool) { + function _isGreater(ConsensusV1.Validator memory validatorA, ConsensusV1.Validator memory validatorB) + internal + pure + returns (bool) + { if (validatorA.data.voteBalance == validatorB.data.voteBalance) { return validatorA.addr > validatorB.addr; } @@ -61,7 +69,7 @@ contract Base is Test { consensus.registerValidator(validatorKey); vm.stopPrank(); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 0 ether); assertEq(validator.data.votersCount, 0); diff --git a/contracts/test/consensus/Consensus-CalculateTop.sol b/contracts/test/consensus/Consensus-CalculateTop.sol index b40e5e5dd..e4f1a70ed 100644 --- a/contracts/test/consensus/Consensus-CalculateTop.sol +++ b/contracts/test/consensus/Consensus-CalculateTop.sol @@ -1,13 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import { - ConsensusV1, - ValidatorData, - Validator, - InvalidParameters, - NoActiveValidators -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -18,7 +12,7 @@ contract ConsensusTest is Base { registerValidator(addr); consensus.calculateActiveValidators(1); - Validator[] memory validators = consensus.getActiveValidators(); + ConsensusV1.Validator[] memory validators = consensus.getActiveValidators(); assertEq(validators.length, 1); assertEq(validators[0].addr, addr); } @@ -33,26 +27,26 @@ contract ConsensusTest is Base { function test_should_revert_with_0_parameter() public { registerValidator(address(1)); - vm.expectRevert(InvalidParameters.selector); + vm.expectRevert(ConsensusV1.InvalidParameters.selector); consensus.calculateActiveValidators(0); } function test_should_revert_without_validators() public { - vm.expectRevert(NoActiveValidators.selector); + vm.expectRevert(ConsensusV1.NoActiveValidators.selector); consensus.calculateActiveValidators(1); } function test_should_revert_with_only_resigned_validators() public { consensus.addValidator(address(2), prepareBLSKey(address(2)), true); - vm.expectRevert(NoActiveValidators.selector); + vm.expectRevert(ConsensusV1.NoActiveValidators.selector); consensus.calculateActiveValidators(1); } function test_should_revert_with_only_validators_without_public_key() public { consensus.addValidator(address(1), new bytes(0), false); - vm.expectRevert(NoActiveValidators.selector); + vm.expectRevert(ConsensusV1.NoActiveValidators.selector); consensus.calculateActiveValidators(1); } @@ -64,7 +58,7 @@ contract ConsensusTest is Base { resignValidator(addr); consensus.calculateActiveValidators(2); - Validator[] memory validators = consensus.getActiveValidators(); + ConsensusV1.Validator[] memory validators = consensus.getActiveValidators(); assertEq(validators.length, 2); assertEq(validators[0].addr, address(2)); assertEq(validators[1].addr, address(2)); // Second validator is duplicated @@ -79,7 +73,7 @@ contract ConsensusTest is Base { resignValidator(address(2)); consensus.calculateActiveValidators(2); - Validator[] memory validators = consensus.getActiveValidators(); + ConsensusV1.Validator[] memory validators = consensus.getActiveValidators(); assertEq(validators.length, 2); assertEq(validators[0].addr, addr); assertEq(validators[1].addr, addr); // Second validator is duplicated @@ -92,7 +86,7 @@ contract ConsensusTest is Base { consensus.addValidator(address(2), new bytes(0), false); consensus.calculateActiveValidators(2); - Validator[] memory validators = consensus.getActiveValidators(); + ConsensusV1.Validator[] memory validators = consensus.getActiveValidators(); assertEq(validators.length, 2); assertEq(validators[0].addr, addr); assertEq(validators[1].addr, addr); // Second validator is duplicated @@ -134,7 +128,7 @@ contract ConsensusTest is Base { uint160 activeValidators = 53; consensus.calculateActiveValidators(uint8(activeValidators)); - Validator[] memory validators = consensus.getActiveValidators(); + ConsensusV1.Validator[] memory validators = consensus.getActiveValidators(); assertEq(validators.length, activeValidators); assertEq(validators[activeValidators - 1].addr, address(0xAE)); // Shuffled address diff --git a/contracts/test/consensus/Consensus-GetAllValidators.sol b/contracts/test/consensus/Consensus-GetAllValidators.sol index 70d721c58..f417aa85e 100644 --- a/contracts/test/consensus/Consensus-GetAllValidators.sol +++ b/contracts/test/consensus/Consensus-GetAllValidators.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import {ConsensusV1, ValidatorData, Validator} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -22,7 +22,7 @@ contract ConsensusTest is Base { vm.resumeGasMetering(); - Validator[] memory validators = consensus.getAllValidators(); + ConsensusV1.Validator[] memory validators = consensus.getAllValidators(); assertEq(validators.length, n); } } diff --git a/contracts/test/consensus/Consensus-Proxy.sol b/contracts/test/consensus/Consensus-Proxy.sol index cb94c8dfc..db6752232 100644 --- a/contracts/test/consensus/Consensus-Proxy.sol +++ b/contracts/test/consensus/Consensus-Proxy.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import {ConsensusV1, ValidatorData, Validator} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; @@ -65,7 +65,7 @@ contract ConsensusTest is Base { assertEq(consensus.activeValidatorsCount(), 2); assertEq(consensus.getVotesCount(), 1); assertEq(consensus.getActiveValidators().length, 2); - Validator[] memory validatorsBefore = consensus.getAllValidators(); + ConsensusV1.Validator[] memory validatorsBefore = consensus.getAllValidators(); assertEq(validatorsBefore.length, 3); // Upgrade @@ -80,7 +80,7 @@ contract ConsensusTest is Base { assertEq(consensusNew.activeValidatorsCount(), 2); assertEq(consensusNew.getVotesCount(), 1); assertEq(consensus.getActiveValidators().length, 2); - Validator[] memory validatorsAfter = consensusNew.getAllValidators(); + ConsensusV1.Validator[] memory validatorsAfter = consensusNew.getAllValidators(); assertEq(validatorsAfter.length, 3); // Compare valdiators diff --git a/contracts/test/consensus/Consensus-Rounds.sol b/contracts/test/consensus/Consensus-Rounds.sol index 1d34ab8fc..471b89bf1 100644 --- a/contracts/test/consensus/Consensus-Rounds.sol +++ b/contracts/test/consensus/Consensus-Rounds.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import {ConsensusV1, Round} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -28,7 +28,7 @@ contract ConsensusTest is Base { consensus.calculateActiveValidators(1); assertEq(consensus.getRoundsCount(), 1); - Round[] memory rounds = consensus.getRounds(0, 10); + ConsensusV1.Round[] memory rounds = consensus.getRounds(0, 10); assertEq(rounds.length, 1); assertEq(rounds[0].round, 1); assertEq(rounds[0].validators.length, 1); @@ -41,10 +41,10 @@ contract ConsensusTest is Base { consensus.registerValidator(prepareBLSKey(addr)); vm.stopPrank(); - // Round 1 + // ConsensusV1.Round 1 consensus.calculateActiveValidators(1); assertEq(consensus.getRoundsCount(), 1); - Round[] memory rounds = consensus.getRounds(0, 10); + ConsensusV1.Round[] memory rounds = consensus.getRounds(0, 10); assertEq(rounds.length, 1); assertEq(rounds[0].round, 1); assertEq(rounds[0].validators.length, 1); @@ -58,7 +58,7 @@ contract ConsensusTest is Base { consensus.vote(addr); vm.stopPrank(); - // Round 2 + // ConsensusV1.Round 2 consensus.calculateActiveValidators(1); assertEq(consensus.getRoundsCount(), 2); rounds = consensus.getRounds(0, 10); @@ -79,7 +79,7 @@ contract ConsensusTest is Base { consensus.vote(addr); vm.stopPrank(); - // Round 3 + // ConsensusV1.Round 3 consensus.calculateActiveValidators(1); assertEq(consensus.getRoundsCount(), 3); rounds = consensus.getRounds(0, 10); @@ -113,7 +113,7 @@ contract ConsensusTest is Base { assertEq(consensus.getRoundsCount(), 3); // Shoudl slice array if count is greater than rounds left - Round[] memory rounds = consensus.getRounds(0, 10); + ConsensusV1.Round[] memory rounds = consensus.getRounds(0, 10); assertEq(rounds.length, 3); assertEq(rounds[0].round, 1); assertEq(rounds[1].round, 2); diff --git a/contracts/test/consensus/Consensus-UpdateVoters.sol b/contracts/test/consensus/Consensus-UpdateVoters.sol index 39e8112ab..8a68be7e0 100644 --- a/contracts/test/consensus/Consensus-UpdateVoters.sol +++ b/contracts/test/consensus/Consensus-UpdateVoters.sol @@ -1,7 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import {ConsensusV1, ValidatorData, Validator, Unvoted, Voted} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; diff --git a/contracts/test/consensus/Consensus-ValidatoUpdate.sol b/contracts/test/consensus/Consensus-ValidatoUpdate.sol index 07cc13405..d2ea94d55 100644 --- a/contracts/test/consensus/Consensus-ValidatoUpdate.sol +++ b/contracts/test/consensus/Consensus-ValidatoUpdate.sol @@ -1,22 +1,13 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import { - ConsensusV1, - ValidatorData, - Validator, - ValidatorUpdated, - ValidatorAlreadyRegistered, - BlsKeyAlreadyRegistered, - BlsKeyIsInvalid, - CallerIsNotValidator -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; contract ConsensusTest is Base { function test_updateBlsPublicKey_revert_if_caller_is_not_validator() public { - vm.expectRevert(CallerIsNotValidator.selector); + vm.expectRevert(ConsensusV1.CallerIsNotValidator.selector); consensus.resignValidator(); } @@ -26,7 +17,7 @@ contract ConsensusTest is Base { consensus.registerValidator(prepareBLSKey(addr)); - vm.expectRevert(BlsKeyAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.BlsKeyAlreadyRegistered.selector); consensus.updateValidator(prepareBLSKey(addr)); } @@ -39,7 +30,7 @@ contract ConsensusTest is Base { vm.startPrank(addr2); consensus.registerValidator(prepareBLSKey(addr2)); - vm.expectRevert(BlsKeyAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.BlsKeyAlreadyRegistered.selector); consensus.updateValidator(prepareBLSKey(addr)); } @@ -48,13 +39,13 @@ contract ConsensusTest is Base { vm.startPrank(addr); consensus.registerValidator(prepareBLSKey(addr)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.updateValidator(prepareBLSKey(addr, 46)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.updateValidator(prepareBLSKey(addr, 47)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.updateValidator(prepareBLSKey(addr, 49)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.updateValidator(prepareBLSKey(addr, 50)); } @@ -64,10 +55,10 @@ contract ConsensusTest is Base { consensus.registerValidator(prepareBLSKey(addr)); vm.expectEmit(address(consensus)); - emit ValidatorUpdated(addr, prepareBLSKey(address(2))); + emit ConsensusV1.ValidatorUpdated(addr, prepareBLSKey(address(2))); consensus.updateValidator(prepareBLSKey(address(2))); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, prepareBLSKey(address(2))); } @@ -78,14 +69,14 @@ contract ConsensusTest is Base { consensus.registerValidator(prepareBLSKey(addr)); vm.expectEmit(address(consensus)); - emit ValidatorUpdated(addr, prepareBLSKey(address(2))); + emit ConsensusV1.ValidatorUpdated(addr, prepareBLSKey(address(2))); consensus.updateValidator(prepareBLSKey(address(2))); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, prepareBLSKey(address(2))); - vm.expectRevert(BlsKeyAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.BlsKeyAlreadyRegistered.selector); consensus.updateValidator(prepareBLSKey(address(2))); } } diff --git a/contracts/test/consensus/Consensus-ValidatorAdd.sol b/contracts/test/consensus/Consensus-ValidatorAdd.sol index ee5654246..982a6fc95 100644 --- a/contracts/test/consensus/Consensus-ValidatorAdd.sol +++ b/contracts/test/consensus/Consensus-ValidatorAdd.sol @@ -1,16 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import { - ConsensusV1, - ValidatorData, - Validator, - ValidatorRegistered, - ValidatorAlreadyRegistered, - BlsKeyAlreadyRegistered, - ImportIsNotAllowed, - BlsKeyIsInvalid -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -23,14 +14,14 @@ contract ConsensusTest is Base { // Act vm.expectEmit(address(consensus)); - emit ValidatorRegistered(addr, prepareBLSKey(addr)); + emit ConsensusV1.ValidatorRegistered(addr, prepareBLSKey(addr)); consensus.addValidator(addr, prepareBLSKey(addr), false); // Assert assertEq(consensus.registeredValidatorsCount(), 1); assertEq(consensus.resignedValidatorsCount(), 0); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, prepareBLSKey(addr)); assertEq(validator.data.voteBalance, 0); @@ -45,13 +36,13 @@ contract ConsensusTest is Base { // Act vm.expectEmit(address(consensus)); - emit ValidatorRegistered(addr, prepareBLSKey(addr)); + emit ConsensusV1.ValidatorRegistered(addr, prepareBLSKey(addr)); consensus.addValidator(addr, prepareBLSKey(addr), true); // Assert assertEq(consensus.registeredValidatorsCount(), 1); assertEq(consensus.resignedValidatorsCount(), 1); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, prepareBLSKey(addr)); assertEq(validator.data.voteBalance, 0); @@ -66,14 +57,14 @@ contract ConsensusTest is Base { // Act vm.expectEmit(address(consensus)); - emit ValidatorRegistered(addr, new bytes(0)); + emit ConsensusV1.ValidatorRegistered(addr, new bytes(0)); consensus.addValidator(addr, new bytes(0), false); // Assert assertEq(consensus.registeredValidatorsCount(), 1); assertEq(consensus.resignedValidatorsCount(), 0); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, new bytes(0)); assertEq(validator.data.voteBalance, 0); @@ -94,7 +85,7 @@ contract ConsensusTest is Base { consensus.calculateActiveValidators(1); - vm.expectRevert(ImportIsNotAllowed.selector); + vm.expectRevert(ConsensusV1.ImportIsNotAllowed.selector); consensus.addValidator(addr, prepareBLSKey(addr), false); } @@ -102,7 +93,7 @@ contract ConsensusTest is Base { address addr = address(1); consensus.addValidator(addr, prepareBLSKey(addr), false); - vm.expectRevert(ValidatorAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.ValidatorAlreadyRegistered.selector); consensus.addValidator(addr, prepareBLSKey(addr), false); } @@ -110,20 +101,20 @@ contract ConsensusTest is Base { address addr = address(1); consensus.addValidator(addr, prepareBLSKey(addr), false); - vm.expectRevert(BlsKeyAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.BlsKeyAlreadyRegistered.selector); consensus.addValidator(address(2), prepareBLSKey(addr), false); } function test_validator_registration_revert_if_bls_key_length_is_invalid() public { address addr = address(1); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.addValidator(addr, prepareBLSKey(addr, 46), false); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.addValidator(addr, prepareBLSKey(addr, 47), false); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.addValidator(addr, prepareBLSKey(addr, 49), false); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.addValidator(addr, prepareBLSKey(addr, 50), false); } } diff --git a/contracts/test/consensus/Consensus-ValidatorRegistration.sol b/contracts/test/consensus/Consensus-ValidatorRegistration.sol index 16d2214c0..6c7b943b8 100644 --- a/contracts/test/consensus/Consensus-ValidatorRegistration.sol +++ b/contracts/test/consensus/Consensus-ValidatorRegistration.sol @@ -1,15 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import { - ConsensusV1, - ValidatorData, - Validator, - ValidatorRegistered, - ValidatorAlreadyRegistered, - BlsKeyAlreadyRegistered, - BlsKeyIsInvalid -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -21,13 +13,13 @@ contract ConsensusTest is Base { // Act vm.startPrank(addr); vm.expectEmit(address(consensus)); - emit ValidatorRegistered(addr, prepareBLSKey(addr)); + emit ConsensusV1.ValidatorRegistered(addr, prepareBLSKey(addr)); consensus.registerValidator(prepareBLSKey(addr)); vm.stopPrank(); // Assert assertEq(consensus.registeredValidatorsCount(), 1); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, prepareBLSKey(addr)); assertEq(validator.data.voteBalance, 0); @@ -41,7 +33,7 @@ contract ConsensusTest is Base { vm.startPrank(addr); consensus.registerValidator(prepareBLSKey(addr)); - vm.expectRevert(ValidatorAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.ValidatorAlreadyRegistered.selector); consensus.registerValidator(prepareBLSKey(address(2))); } @@ -52,7 +44,7 @@ contract ConsensusTest is Base { consensus.registerValidator(prepareBLSKey(addr)); vm.startPrank(address(2)); - vm.expectRevert(BlsKeyAlreadyRegistered.selector); + vm.expectRevert(ConsensusV1.BlsKeyAlreadyRegistered.selector); consensus.registerValidator(prepareBLSKey(addr)); } @@ -60,15 +52,15 @@ contract ConsensusTest is Base { address addr = address(1); vm.startPrank(addr); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.registerValidator(prepareBLSKey(addr, 46)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.registerValidator(prepareBLSKey(addr, 47)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.registerValidator(prepareBLSKey(addr, 49)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.registerValidator(prepareBLSKey(addr, 50)); - vm.expectRevert(BlsKeyIsInvalid.selector); + vm.expectRevert(ConsensusV1.BlsKeyIsInvalid.selector); consensus.registerValidator(new bytes(0)); } } diff --git a/contracts/test/consensus/Consensus-ValidatorResignation.sol b/contracts/test/consensus/Consensus-ValidatorResignation.sol index ce52968e4..ef4df8d10 100644 --- a/contracts/test/consensus/Consensus-ValidatorResignation.sol +++ b/contracts/test/consensus/Consensus-ValidatorResignation.sol @@ -1,15 +1,7 @@ // SPDX-License-Identifier: GNU GENERAL PUBLIC LICENSE pragma solidity ^0.8.13; -import { - ConsensusV1, - ValidatorData, - Validator, - ValidatorResigned, - ValidatorAlreadyResigned, - CallerIsNotValidator, - BellowMinValidators -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; @@ -24,7 +16,7 @@ contract ConsensusTest is Base { // Assert assertEq(consensus.registeredValidatorsCount(), 2); - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.blsPublicKey, prepareBLSKey(addr)); assertEq(validator.data.voteBalance, 0); @@ -34,7 +26,7 @@ contract ConsensusTest is Base { // Act vm.startPrank(addr); vm.expectEmit(address(consensus)); - emit ValidatorResigned(addr); + emit ConsensusV1.ValidatorResigned(addr); consensus.resignValidator(); vm.stopPrank(); @@ -48,7 +40,7 @@ contract ConsensusTest is Base { } function test_validator_resignation_revert_if_caller_is_not_validator() public { - vm.expectRevert(CallerIsNotValidator.selector); + vm.expectRevert(ConsensusV1.CallerIsNotValidator.selector); consensus.resignValidator(); } @@ -66,10 +58,10 @@ contract ConsensusTest is Base { // Act vm.startPrank(addr); vm.expectEmit(address(consensus)); - emit ValidatorResigned(addr); + emit ConsensusV1.ValidatorResigned(addr); consensus.resignValidator(); - vm.expectRevert(ValidatorAlreadyResigned.selector); + vm.expectRevert(ConsensusV1.ValidatorAlreadyResigned.selector); consensus.resignValidator(); } @@ -85,7 +77,7 @@ contract ConsensusTest is Base { // Act vm.startPrank(addr); - vm.expectRevert(BellowMinValidators.selector); + vm.expectRevert(ConsensusV1.BellowMinValidators.selector); consensus.resignValidator(); } @@ -105,7 +97,7 @@ contract ConsensusTest is Base { // Test vm.startPrank(addr); - vm.expectRevert(BellowMinValidators.selector); + vm.expectRevert(ConsensusV1.BellowMinValidators.selector); consensus.resignValidator(); vm.stopPrank(); @@ -114,7 +106,7 @@ contract ConsensusTest is Base { // Test vm.startPrank(addr); - vm.expectRevert(BellowMinValidators.selector); + vm.expectRevert(ConsensusV1.BellowMinValidators.selector); consensus.resignValidator(); vm.stopPrank(); @@ -124,11 +116,11 @@ contract ConsensusTest is Base { // Test vm.startPrank(addr); vm.expectEmit(address(consensus)); - emit ValidatorResigned(addr); + emit ConsensusV1.ValidatorResigned(addr); consensus.resignValidator(); vm.startPrank(address(2)); - vm.expectRevert(BellowMinValidators.selector); + vm.expectRevert(ConsensusV1.BellowMinValidators.selector); consensus.resignValidator(); } } diff --git a/contracts/test/consensus/Consensus-Vote.sol b/contracts/test/consensus/Consensus-Vote.sol index af8125f4e..fadc354db 100644 --- a/contracts/test/consensus/Consensus-Vote.sol +++ b/contracts/test/consensus/Consensus-Vote.sol @@ -2,19 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "@forge-std/Test.sol"; -import { - ConsensusV1, - ValidatorData, - Validator, - Unvoted, - Voted, - VoteResult, - ValidatorNotRegistered, - VoteResignedValidator, - VoteSameValidator, - VoteValidatorWithoutBlsPublicKey, - MissingVote -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -23,7 +11,7 @@ contract ConsensusTest is Base { function test_vote() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -37,12 +25,12 @@ contract ConsensusTest is Base { // Vote vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.vote(addr); vm.stopPrank(); // Assert validator - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -79,7 +67,7 @@ contract ConsensusTest is Base { } function test_unvote_revert_if_did_not_vote() public { - vm.expectRevert(MissingVote.selector); + vm.expectRevert(ConsensusV1.MissingVote.selector); consensus.unvote(); } @@ -93,7 +81,7 @@ contract ConsensusTest is Base { function test_vote_allow_self_vote() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -107,12 +95,12 @@ contract ConsensusTest is Base { // Vote vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.vote(addr); vm.stopPrank(); // Assert voteBalance - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -158,10 +146,10 @@ contract ConsensusTest is Base { vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.vote(addr); - vm.expectRevert(VoteSameValidator.selector); + vm.expectRevert(ConsensusV1.VoteSameValidator.selector); consensus.vote(addr); } @@ -169,7 +157,7 @@ contract ConsensusTest is Base { address addr = address(1); vm.startPrank(addr); - vm.expectRevert(ValidatorNotRegistered.selector); + vm.expectRevert(ConsensusV1.ValidatorNotRegistered.selector); consensus.vote(addr); } @@ -178,7 +166,7 @@ contract ConsensusTest is Base { consensus.addValidator(addr, new bytes(0), false); vm.startPrank(addr); - vm.expectRevert(VoteValidatorWithoutBlsPublicKey.selector); + vm.expectRevert(ConsensusV1.VoteValidatorWithoutBlsPublicKey.selector); consensus.vote(addr); } @@ -192,14 +180,14 @@ contract ConsensusTest is Base { // Prepare voter address voterAddr = address(3); vm.startPrank(voterAddr); - vm.expectRevert(VoteResignedValidator.selector); + vm.expectRevert(ConsensusV1.VoteResignedValidator.selector); consensus.vote(addr); } function test_swap_vote() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -214,17 +202,17 @@ contract ConsensusTest is Base { vm.deal(voterAddr, 100 ether); vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Voted(voterAddr, validatorAddr1); + emit ConsensusV1.Voted(voterAddr, validatorAddr1); consensus.vote(validatorAddr1); vm.stopPrank(); // Assert validator 1 - Validator memory validator1 = consensus.getValidator(validatorAddr1); + ConsensusV1.Validator memory validator1 = consensus.getValidator(validatorAddr1); assertEq(validator1.addr, validatorAddr1); assertEq(validator1.data.voteBalance, 100 ether); assertEq(validator1.data.votersCount, 1); // Assert validator 2 - Validator memory validator2 = consensus.getValidator(validatorAddr2); + ConsensusV1.Validator memory validator2 = consensus.getValidator(validatorAddr2); assertEq(validator2.addr, validatorAddr2); assertEq(validator2.data.voteBalance, 0 ether); assertEq(validator2.data.votersCount, 0); @@ -244,7 +232,7 @@ contract ConsensusTest is Base { // Swap Vote vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Voted(voterAddr, validatorAddr2); + emit ConsensusV1.Voted(voterAddr, validatorAddr2); consensus.vote(validatorAddr2); vm.stopPrank(); @@ -272,7 +260,7 @@ contract ConsensusTest is Base { function test_unvote_and_vote_in_same_block() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -287,7 +275,7 @@ contract ConsensusTest is Base { vm.stopPrank(); // Assert validator - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -306,7 +294,7 @@ contract ConsensusTest is Base { // Unvote vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Unvoted(voterAddr, addr); + emit ConsensusV1.Unvoted(voterAddr, addr); consensus.unvote(); vm.stopPrank(); @@ -326,7 +314,7 @@ contract ConsensusTest is Base { function test_unvote_and_vote_in_different_blocks() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -341,7 +329,7 @@ contract ConsensusTest is Base { vm.stopPrank(); // Assert validator - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -381,7 +369,7 @@ contract ConsensusTest is Base { // Unvote vm.startPrank(voterAddr); vm.expectEmit(address(consensus)); - emit Unvoted(voterAddr, addr); + emit ConsensusV1.Unvoted(voterAddr, addr); consensus.unvote(); vm.stopPrank(); @@ -401,7 +389,7 @@ contract ConsensusTest is Base { function test_multiple_voted_different_validators() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validators @@ -434,17 +422,17 @@ contract ConsensusTest is Base { vm.stopPrank(); // Assert validators 1 - Validator memory validator1 = consensus.getValidator(validatorAddr1); + ConsensusV1.Validator memory validator1 = consensus.getValidator(validatorAddr1); assertEq(validator1.addr, validatorAddr1); assertEq(validator1.data.voteBalance, 100 ether); assertEq(validator1.data.votersCount, 1); // Assert validator 2 - Validator memory validator2 = consensus.getValidator(validatorAddr2); + ConsensusV1.Validator memory validator2 = consensus.getValidator(validatorAddr2); assertEq(validator2.addr, validatorAddr2); assertEq(validator2.data.voteBalance, 100 ether); assertEq(validator2.data.votersCount, 1); // Assert validator 3 - Validator memory validator3 = consensus.getValidator(validatorAddr3); + ConsensusV1.Validator memory validator3 = consensus.getValidator(validatorAddr3); assertEq(validator3.addr, validatorAddr3); assertEq(validator3.data.voteBalance, 100 ether); assertEq(validator3.data.votersCount, 1); @@ -551,7 +539,7 @@ contract ConsensusTest is Base { function test_multiple_voted_same_validator() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validators @@ -580,7 +568,7 @@ contract ConsensusTest is Base { vm.stopPrank(); // Assert validators 1 - Validator memory validator1 = consensus.getValidator(validatorAddr1); + ConsensusV1.Validator memory validator1 = consensus.getValidator(validatorAddr1); assertEq(validator1.addr, validatorAddr1); assertEq(validator1.data.voteBalance, 300 ether); assertEq(validator1.data.votersCount, 3); @@ -657,7 +645,7 @@ contract ConsensusTest is Base { function test_pagination() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validators diff --git a/contracts/test/consensus/Consensus-VoteAdd.sol b/contracts/test/consensus/Consensus-VoteAdd.sol index 33f134c52..b09bdf10b 100644 --- a/contracts/test/consensus/Consensus-VoteAdd.sol +++ b/contracts/test/consensus/Consensus-VoteAdd.sol @@ -2,20 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "@forge-std/Test.sol"; -import { - ConsensusV1, - ValidatorData, - Validator, - Unvoted, - Voted, - VoteResult, - ValidatorNotRegistered, - VoteResignedValidator, - VoteSameValidator, - AlreadyVoted, - ImportIsNotAllowed, - MissingVote -} from "@contracts/consensus/ConsensusV1.sol"; +import {ConsensusV1} from "@contracts/consensus/ConsensusV1.sol"; import {Base} from "./Base.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -24,7 +11,7 @@ contract ConsensusTest is Base { function test_add_vote_pass() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -37,11 +24,11 @@ contract ConsensusTest is Base { // Vote vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.addVote(voterAddr, addr); // Assert validator - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -59,7 +46,7 @@ contract ConsensusTest is Base { function test_add_vote_pass_for_resigned_validator() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -72,11 +59,11 @@ contract ConsensusTest is Base { // Vote vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.addVote(voterAddr, addr); // Assert validator - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -94,7 +81,7 @@ contract ConsensusTest is Base { function test_add_vote_pass_for_validator_without_bls_key() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -107,11 +94,11 @@ contract ConsensusTest is Base { // Vote vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.addVote(voterAddr, addr); // Assert validator - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -139,14 +126,14 @@ contract ConsensusTest is Base { consensus.calculateActiveValidators(1); - vm.expectRevert(ImportIsNotAllowed.selector); + vm.expectRevert(ConsensusV1.ImportIsNotAllowed.selector); consensus.addVote(addr, addr); } function test_add_vote_allow_self_vote() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validator @@ -159,12 +146,12 @@ contract ConsensusTest is Base { // Vote vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.addVote(voterAddr, addr); vm.stopPrank(); // Assert voteBalance - Validator memory validator = consensus.getValidator(addr); + ConsensusV1.Validator memory validator = consensus.getValidator(addr); assertEq(validator.addr, addr); assertEq(validator.data.voteBalance, 100 ether); assertEq(validator.data.votersCount, 1); @@ -187,24 +174,24 @@ contract ConsensusTest is Base { address voterAddr = address(2); vm.expectEmit(address(consensus)); - emit Voted(voterAddr, addr); + emit ConsensusV1.Voted(voterAddr, addr); consensus.addVote(voterAddr, addr); - vm.expectRevert(AlreadyVoted.selector); + vm.expectRevert(ConsensusV1.AlreadyVoted.selector); consensus.addVote(voterAddr, addr); } function test_add_vote_prevent_vote_for_unregistered_validator() public { address addr = address(1); - vm.expectRevert(ValidatorNotRegistered.selector); + vm.expectRevert(ConsensusV1.ValidatorNotRegistered.selector); consensus.addVote(addr, addr); } function test_multiple_voted_different_validators() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validators @@ -231,17 +218,17 @@ contract ConsensusTest is Base { consensus.addVote(voterAddr3, validatorAddr3); // Assert validators 1 - Validator memory validator1 = consensus.getValidator(validatorAddr1); + ConsensusV1.Validator memory validator1 = consensus.getValidator(validatorAddr1); assertEq(validator1.addr, validatorAddr1); assertEq(validator1.data.voteBalance, 100 ether); assertEq(validator1.data.votersCount, 1); // Assert validator 2 - Validator memory validator2 = consensus.getValidator(validatorAddr2); + ConsensusV1.Validator memory validator2 = consensus.getValidator(validatorAddr2); assertEq(validator2.addr, validatorAddr2); assertEq(validator2.data.voteBalance, 100 ether); assertEq(validator2.data.votersCount, 1); // Assert validator 3 - Validator memory validator3 = consensus.getValidator(validatorAddr3); + ConsensusV1.Validator memory validator3 = consensus.getValidator(validatorAddr3); assertEq(validator3.addr, validatorAddr3); assertEq(validator3.data.voteBalance, 100 ether); assertEq(validator3.data.votersCount, 1); @@ -261,7 +248,7 @@ contract ConsensusTest is Base { function test_multiple_voted_same_validator() public { // Assert voters assertEq(consensus.getVotesCount(), 0); - VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); + ConsensusV1.VoteResult[] memory allVoters = consensus.getVotes(address(0), 10); assertEq(allVoters.length, 0); // Register validators @@ -284,7 +271,7 @@ contract ConsensusTest is Base { consensus.addVote(voterAddr3, validatorAddr1); // Assert validators 1 - Validator memory validator1 = consensus.getValidator(validatorAddr1); + ConsensusV1.Validator memory validator1 = consensus.getValidator(validatorAddr1); assertEq(validator1.addr, validatorAddr1); assertEq(validator1.data.voteBalance, 300 ether); assertEq(validator1.data.votersCount, 3); diff --git a/contracts/test/multi-payment/MultiPayment.sol b/contracts/test/multi-payment/MultiPayment.sol index f9221449e..14db437c7 100644 --- a/contracts/test/multi-payment/MultiPayment.sol +++ b/contracts/test/multi-payment/MultiPayment.sol @@ -2,12 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "@forge-std/Test.sol"; -import { - MultiPayment, - RecipientsAndAmountsMismatch, - InvalidValue, - FailedToSendEther -} from "@contracts/multi-payment/MultiPayment.sol"; +import {MultiPayment} from "@contracts/multi-payment/MultiPayment.sol"; contract RejectPayments { receive() external payable { @@ -180,7 +175,7 @@ contract MultiPaymentTest is Test { amounts[1] = 60 ether; // Act - vm.expectRevert(RecipientsAndAmountsMismatch.selector); + vm.expectRevert(MultiPayment.RecipientsAndAmountsMismatch.selector); multiPayment.pay{value: 100 ether}(recipients, amounts); } @@ -199,7 +194,7 @@ contract MultiPaymentTest is Test { amounts[0] = 40 ether; // Act - vm.expectRevert(InvalidValue.selector); + vm.expectRevert(MultiPayment.InvalidValue.selector); multiPayment.pay{value: 50 ether}(recipients, amounts); } @@ -220,7 +215,7 @@ contract MultiPaymentTest is Test { // Act recipient = payable(address(0)); // Force recipient to be address(0) - vm.expectRevert(FailedToSendEther.selector); + vm.expectRevert(MultiPayment.FailedToSendEther.selector); multiPayment.pay{value: 40 ether}(recipients, amounts); } diff --git a/contracts/test/usernames/Usernames-Proxy.sol b/contracts/test/usernames/Usernames-Proxy.sol index 150db676c..beffa0ee5 100644 --- a/contracts/test/usernames/Usernames-Proxy.sol +++ b/contracts/test/usernames/Usernames-Proxy.sol @@ -2,14 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "@forge-std/Test.sol"; -import { - UsernamesV1, - InvalidUsername, - TakenUsername, - UsernameNotRegistered, - UsernameRegistered, - UsernameResigned -} from "@contracts/usernames/UsernamesV1.sol"; +import {UsernamesV1} from "@contracts/usernames/UsernamesV1.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {Initializable} from "@openzeppelin/contracts/proxy/utils/Initializable.sol"; @@ -33,7 +26,7 @@ contract ProxyTest is Test { usernames.initialize(); } - function test_shoudl_have_valid_UPGRADE_INTERFACE_VERSION() public view { + function test_should_have_valid_UPGRADE_INTERFACE_VERSION() public view { assertEq(usernames.UPGRADE_INTERFACE_VERSION(), "5.0.0"); } @@ -54,7 +47,7 @@ contract ProxyTest is Test { function test_proxy_should_update_and_perserve_variables() public { assertEq(usernames.version(), 1); - // Register valdiators + // Register validators usernames.addUsername(address(1), "test"); usernames.addUsername(address(2), "test2"); diff --git a/contracts/test/usernames/UsernamesV1.sol b/contracts/test/usernames/UsernamesV1.sol index 3ac622b20..b2fdf6650 100644 --- a/contracts/test/usernames/UsernamesV1.sol +++ b/contracts/test/usernames/UsernamesV1.sol @@ -2,15 +2,7 @@ pragma solidity ^0.8.13; import {Test, console} from "@forge-std/Test.sol"; -import { - UsernamesV1, - InvalidUsername, - TakenUsername, - UsernameNotRegistered, - UsernameRegistered, - UsernameResigned, - User -} from "@contracts/usernames/UsernamesV1.sol"; +import {UsernamesV1} from "@contracts/usernames/UsernamesV1.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; import {OwnableUpgradeable} from "@openzeppelin/contracts-upgradeable/access/OwnableUpgradeable.sol"; @@ -32,14 +24,14 @@ contract UsernamesTest is Test { function test_add_username_should_revert_if_username_exist() public { usernames.addUsername(address(1), "test"); - vm.expectRevert(TakenUsername.selector); + vm.expectRevert(UsernamesV1.TakenUsername.selector); usernames.addUsername(address(2), "test"); } function test_add_username_should_revert_if_username_is_empty_or_longer_than_20() public { - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.addUsername(address(1), ""); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.addUsername(address(1), "000000000000000000000"); // 21 chars } @@ -94,11 +86,11 @@ contract UsernamesTest is Test { function test_add_username_should_emit() public { vm.expectEmit(address(usernames)); - emit UsernameRegistered(address(1), "test", ""); + emit UsernamesV1.UsernameRegistered(address(1), "test", ""); usernames.addUsername(address(1), "test"); vm.expectEmit(address(usernames)); - emit UsernameRegistered(address(1), "test2", "test"); + emit UsernamesV1.UsernameRegistered(address(1), "test2", "test"); usernames.addUsername(address(1), "test2"); } @@ -114,7 +106,7 @@ contract UsernamesTest is Test { assertTrue(usernames.isUsernameRegistered("test2")); // Prevent user to use new username - vm.expectRevert(TakenUsername.selector); + vm.expectRevert(UsernamesV1.TakenUsername.selector); usernames.addUsername(address(2), "test2"); // Allow user to update to reuse old username @@ -175,11 +167,11 @@ contract UsernamesTest is Test { function test_register_username_should_emit() public { vm.startPrank(address(1)); vm.expectEmit(address(usernames)); - emit UsernameRegistered(address(1), "test", ""); + emit UsernamesV1.UsernameRegistered(address(1), "test", ""); usernames.registerUsername("test"); vm.expectEmit(address(usernames)); - emit UsernameRegistered(address(1), "test2", "test"); + emit UsernamesV1.UsernameRegistered(address(1), "test2", "test"); usernames.registerUsername("test2"); } @@ -197,7 +189,7 @@ contract UsernamesTest is Test { // Prevent user to use new username vm.startPrank(address(2)); - vm.expectRevert(TakenUsername.selector); + vm.expectRevert(UsernamesV1.TakenUsername.selector); usernames.registerUsername("test2"); // Allow user to update to reuse old username @@ -211,7 +203,7 @@ contract UsernamesTest is Test { function test_register_username_revert_if_empty() public { vm.startPrank(address(1)); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername(""); } @@ -220,31 +212,31 @@ contract UsernamesTest is Test { usernames.registerUsername("test"); vm.startPrank(address(2)); - vm.expectRevert(TakenUsername.selector); + vm.expectRevert(UsernamesV1.TakenUsername.selector); usernames.registerUsername("test"); } function test_register_username_revert_if_greater_than_20() public { vm.startPrank(address(1)); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername("000000000000000000000"); // 20 chars - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername("0000000000000000000000"); // 21 chars - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername("00000000000000000000000"); // 22 chars } function test_register_username_revert_if_starts_or_end_with_underscore() public { vm.startPrank(address(1)); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername("_test"); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername("test_"); } function test_register_username_revert_if_contains_2_consecutive_underscores() public { vm.startPrank(address(1)); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername("te__st"); } @@ -259,7 +251,7 @@ contract UsernamesTest is Test { c[2] = 0x61; // a vm.startPrank(address(uint160(i))); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername(string(c)); } } @@ -275,7 +267,7 @@ contract UsernamesTest is Test { c[2] = 0x61; // a vm.startPrank(address(uint160(i))); - vm.expectRevert(InvalidUsername.selector); + vm.expectRevert(UsernamesV1.InvalidUsername.selector); usernames.registerUsername(string(c)); } } @@ -294,7 +286,7 @@ contract UsernamesTest is Test { // Resign vm.expectEmit(address(usernames)); - emit UsernameResigned(addr, "test"); + emit UsernamesV1.UsernameResigned(addr, "test"); usernames.resignUsername(); assertEq(usernames.getUsername(addr), ""); assertFalse(usernames.isUsernameRegistered("test")); @@ -304,7 +296,7 @@ contract UsernamesTest is Test { // Test address addr = address(1); vm.startPrank(addr); - vm.expectRevert(UsernameNotRegistered.selector); + vm.expectRevert(UsernamesV1.UsernameNotRegistered.selector); usernames.resignUsername(); } @@ -357,7 +349,7 @@ contract UsernamesTest is Test { usernames.addUsername(address(2), "test2"); usernames.addUsername(address(3), "test3"); - User[] memory users = usernames.getUsernames(addresses); + UsernamesV1.User[] memory users = usernames.getUsernames(addresses); assertEq(users.length, 3); assertEq(users[0].addr, address(1)); assertEq(users[0].username, "test1"); diff --git a/packages/evm-contracts/source/abis/ConsensusV1.json b/packages/evm-contracts/source/abis/ConsensusV1.json index c646c61f5..c9aaa2378 100644 --- a/packages/evm-contracts/source/abis/ConsensusV1.json +++ b/packages/evm-contracts/source/abis/ConsensusV1.json @@ -50,13 +50,13 @@ { "name": "", "type": "tuple[]", - "internalType": "struct Validator[]", + "internalType": "struct ConsensusV1.Validator[]", "components": [ { "name": "addr", "type": "address", "internalType": "address" }, { "name": "data", "type": "tuple", - "internalType": "struct ValidatorData", + "internalType": "struct ConsensusV1.ValidatorData", "components": [ { "name": "votersCount", "type": "uint256", "internalType": "uint256" }, { "name": "voteBalance", "type": "uint256", "internalType": "uint256" }, @@ -77,13 +77,13 @@ { "name": "", "type": "tuple[]", - "internalType": "struct Validator[]", + "internalType": "struct ConsensusV1.Validator[]", "components": [ { "name": "addr", "type": "address", "internalType": "address" }, { "name": "data", "type": "tuple", - "internalType": "struct ValidatorData", + "internalType": "struct ConsensusV1.ValidatorData", "components": [ { "name": "votersCount", "type": "uint256", "internalType": "uint256" }, { "name": "voteBalance", "type": "uint256", "internalType": "uint256" }, @@ -107,13 +107,13 @@ { "name": "", "type": "tuple[]", - "internalType": "struct Round[]", + "internalType": "struct ConsensusV1.Round[]", "components": [ { "name": "round", "type": "uint256", "internalType": "uint256" }, { "name": "validators", "type": "tuple[]", - "internalType": "struct RoundValidator[]", + "internalType": "struct ConsensusV1.RoundValidator[]", "components": [ { "name": "addr", "type": "address", "internalType": "address" }, { "name": "voteBalance", "type": "uint256", "internalType": "uint256" } @@ -139,13 +139,13 @@ { "name": "", "type": "tuple", - "internalType": "struct Validator", + "internalType": "struct ConsensusV1.Validator", "components": [ { "name": "addr", "type": "address", "internalType": "address" }, { "name": "data", "type": "tuple", - "internalType": "struct ValidatorData", + "internalType": "struct ConsensusV1.ValidatorData", "components": [ { "name": "votersCount", "type": "uint256", "internalType": "uint256" }, { "name": "voteBalance", "type": "uint256", "internalType": "uint256" }, @@ -169,7 +169,7 @@ { "name": "", "type": "tuple[]", - "internalType": "struct VoteResult[]", + "internalType": "struct ConsensusV1.VoteResult[]", "components": [ { "name": "voter", "type": "address", "internalType": "address" }, { "name": "validator", "type": "address", "internalType": "address" } @@ -400,13 +400,13 @@ { "type": "error", "name": "VoteValidatorWithoutBlsPublicKey", "inputs": [] } ], "bytecode": { - "object": "0x60a0604052306080523480156012575f5ffd5b5060805161387e6100395f395f81816122680152818161229101526123d0015261387e5ff3fe6080604052600436106101af575f3560e01c8063715018a6116100e7578063ad3cb1cc11610087578063eb9019d411610062578063eb9019d4146104a2578063f1bd0b37146104ce578063f2fde38b146104e2578063f3513a3714610501575f5ffd5b8063ad3cb1cc14610422578063b85f5da21461045f578063d04a68c714610473575f5ffd5b8063857861db116100c2578063857861db146103885780638da5cb5b146103a75780639de70258146103ed578063a09686c41461040e575f5ffd5b8063715018a6146103415780637c8a92c3146103555780638129fc1c14610374575f5ffd5b806340f74f471161015257806354fd4d501161012d57806354fd4d50146102d15780635a8eed73146102e4578063602a9eee146103035780636dd7d8ea14610322575f5ffd5b806340f74f471461027e5780634f1ef286146102aa57806352d1902d146102bd575f5ffd5b80631b605b861161018d5780631b605b86146102165780632bdf6d431461022a5780633174b6891461024b5780633d09c2a81461025f575f5ffd5b80630777cbef146101b35780630d2bd909146101d65780631904bb2e146101ea575b5f5ffd5b3480156101be575f5ffd5b506005545b6040519081526020015b60405180910390f35b3480156101e1575f5ffd5b50600d546101c3565b3480156101f5575f5ffd5b50610209610204366004613014565b610515565b6040516101cd91906130d3565b348015610221575f5ffd5b506009546101c3565b348015610235575f5ffd5b506102496102443660046130e5565b610630565b005b348015610256575f5ffd5b5061024961067e565b34801561026a575f5ffd5b50610249610279366004613154565b6106cd565b348015610289575f5ffd5b5061029d610298366004613185565b610918565b6040516101cd91906131a5565b6102496102b8366004613272565b610aab565b3480156102c8575f5ffd5b506101c3610aca565b3480156102dc575f5ffd5b5060016101c3565b3480156102ef575f5ffd5b506102496102fe366004613377565b610ae5565b34801561030e575f5ffd5b5061024961031d366004613377565b610b71565b34801561032d575f5ffd5b5061024961033c366004613014565b610cff565b34801561034c575f5ffd5b50610249610f7d565b348015610360575f5ffd5b5061024961036f3660046133b5565b610f90565b34801561037f575f5ffd5b506102496111cf565b348015610393575f5ffd5b506102496103a236600461341a565b6112db565b3480156103b2575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101cd565b3480156103f8575f5ffd5b50610401611874565b6040516101cd919061343a565b348015610419575f5ffd5b50600f546101c3565b34801561042d575f5ffd5b50610452604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190613491565b34801561046a575f5ffd5b50610249611a14565b34801561047e575f5ffd5b5061049261048d366004613014565b611afd565b60405190151581526020016101cd565b3480156104ad575f5ffd5b506104c16104bc3660046134a3565b611b1a565b6040516101cd91906134cb565b3480156104d9575f5ffd5b506004546101c3565b3480156104ed575f5ffd5b506102496104fc366004613014565b611d1b565b34801561050c575f5ffd5b50610401611d5d565b61051d612f1e565b61052682611afd565b6105435760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549394928501936060840191906105a790613525565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390613525565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b50505091909252505050905292915050565b610638611ef7565b5f5b818110156106795761067183838381811061065757610657613557565b905060200201602081019061066c9190613014565b611f52565b60010161063a565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef336106a8612032565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6106d5611ef7565b600f54156106f6576040516349625b3b60e01b815260040160405180910390fd5b6106ff81611afd565b61071c5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260066020526040902080549091161561075757604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556007541661081457600780546001600160a01b0385166001600160a01b0319918216811790925560088054909116909117905561086c565b600880546001600160a01b039081165f9081526006602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f61087b8361357f565b90915550506001600160a01b038083165f90815260208190526040812060018101805491938716319290916108b1908490613597565b9091555050805460019082905f906108ca908490613597565b9091555050604080516001600160a01b038087168252851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a150505050565b6060610922611ef7565b600f548290841061093457505f610958565b600f546109418486613597565b111561095857600f546109559085906135aa565b90505b5f816001600160401b038111156109715761097161325e565b6040519080825280602002602001820160405280156109b657816020015b604080518082019091525f81526060602082015281526020019060019003908161098f5790505b5090505f5b82811015610aa057604051806040016040528082886109da9190613597565b6109e5906001613597565b8152602001600f6109f6848a613597565b81548110610a0657610a06613557565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610a74575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a2d565b50505050815250828281518110610a8d57610a8d613557565b60209081029190910101526001016109bb565b509150505b92915050565b610ab361225d565b610abc82612301565b610ac68282612309565b5050565b5f610ad36123c5565b505f5160206138295f395f51905f5290565b610aee33611afd565b610b0b5760405163510b8aad60e11b815260040160405180910390fd5b610b15828261240e565b335f908152602081905260409020600301610b31828483613601565b507f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c917032338383604051610b65939291906136ba565b60405180910390a15050565b335f9081526001602052604090205460ff1615610ba15760405163132e7efb60e31b815260040160405180910390fd5b610bab828261240e565b5f60405180608001604052805f81526020015f81526020015f1515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050600480549394509150610c148361357f565b9091555050335f908152600160208181526040808420805460ff19908116851790915584835293819020855181559185015192820192909255908301516002820180549093169015151790915560608201518291906003820190610c7890826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556040517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9250610cf29190869086906136ba565b60405180910390a1505050565b610d0881611afd565b610d255760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f908152602081905260409020600281015460ff1615610d625760405163510ae2bd60e11b815260040160405180910390fd5b806003018054610d7190613525565b90505f03610d925760405163970c784d60e01b815260040160405180910390fd5b335f90815260066020526040902080546001600160a01b03848116911603610dcd57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610de757610de5612032565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560075416610e995760078054336001600160a01b03199182168117909255600880549091169091179055610ef0565b600880546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f610eff8361357f565b9190505550336001600160a01b031631826001015f828254610f219190613597565b9091555050815460019083905f90610f3a908490613597565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e29101610cf2565b610f85611ef7565b610f8e5f612482565b565b610f98611ef7565b600f5415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f84846040516110059291906137b3565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f838361240e565b5f60405180608001604052805f81526020015f8152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506004805493945091506110b88361357f565b90915550506001600160a01b0385165f908152600160208181526040808420805460ff1990811685179091558483529381902085518155918501519282019290925590830151600282018054909316901515179091556060820151829190600382019061112590826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03881617905550811561118d5760058054905f6111878361357f565b91905055505b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516111c0939291906136ba565b60405180910390a15050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112135750825b90505f826001600160401b0316600114801561122e5750303b155b90508115801561123c575080155b1561125a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128457845460ff60401b1916600160401b1785555b61128d336124f2565b6001600e5583156112d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016111c0565b5050505050565b6112e3611ef7565b8060ff165f0361130657604051630e52390960e41b815260040160405180910390fd5b60ff8116600e556113176003612503565b61131f612653565b600c80546001600160a01b03191690556005546004545f916113519160ff851691849161134c91906135aa565b6126a4565b90508060ff165f03611376576040516367c0fced60e01b815260040160405180910390fd5b5f5b600354811015611638575f6003828154811061139657611396613557565b5f9182526020808320909101546001600160a01b031680835290829052604090912060028101549192509060ff16806113dd57508060030180546113d990613525565b1590505b156113e9575050611630565b600c546001600160a01b03166114245750600c80546001600160a01b0319166001600160a01b03929092169190911790556001600d55611630565b8360ff16600d5410156114425761143b82856126f8565b5050611630565b600c546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160808101845285548152600186015481840152600286015460ff16151593810193909352600385018054919461161d949093840192909187916060840191906114b590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546114e190613525565b801561152c5780601f106115035761010080835404028352916020019161152c565b820191905f5260205f20905b81548152906001019060200180831161150f57829003601f168201915b505050919092525050509052604080518082018252600c546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff1615159382019390935260038601805492938401928791606084019161159590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190613525565b801561160c5780601f106115e35761010080835404028352916020019161160c565b820191905f5260205f20905b8154815290600101906020018083116115ef57829003601f168201915b505050505081525050815250612ad4565b1561162c5761162c83866126f8565b5050505b600101611378565b50600d545f0361165b576040516367c0fced60e01b815260040160405180910390fd5b600c54600d546001600160a01b03909116905f906001600160401b038111156116865761168661325e565b6040519080825280602002602001820160405280156116af578160200160208202803683370190505b5090505f5b600d5481101561170957828282815181106116d1576116d1613557565b6001600160a01b039283166020918202929092018101919091529381165f908152600a909452604090932054909216916001016116b4565b5061171381612b18565b600f80546001810182555f9182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802019061175090600b90612f67565b600e546001600160401b0381111561176a5761176a61325e565b604051908082528060200260200182016040528015611793578160200160208202803683370190505b5080516117a891600b91602090910190612f82565b505f5b600e5481101561186c575f83600d54836117c591906137c2565b815181106117d5576117d5613557565b6020026020010151905080600b83815481106117f3576117f3613557565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832060019081015486840190815288548083018a55898652939094209551600290930290950180549290941691161782555190820155016117ab565b505050505050565b600b546060905f906001600160401b038111156118935761189361325e565b6040519080825280602002602001820160405280156118cc57816020015b6118b9612f1e565b8152602001906001900390816118b15790505b5090505f5b600b54811015611a0e575f600b82815481106118ef576118ef613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff16151595810195909552600382018054939650919490938401929091859160608401919061196490613525565b80601f016020809104026020016040519081016040528092919081815260200182805461199090613525565b80156119db5780601f106119b2576101008083540402835291602001916119db565b820191905f5260205f20905b8154815290600101906020018083116119be57829003601f168201915b5050505050815250508152508484815181106119f9576119f9613557565b602090810291909101015250506001016118d1565b50919050565b611a1d33611afd565b611a3a5760405163668191af60e11b815260040160405180910390fd5b335f908152602081905260409020600281015460ff1615611a6e57604051632d8b5c9760e21b815260040160405180910390fd5b600e54600554600454611a8191906135aa565b11611a9f57604051633b15f1f760e21b815260040160405180910390fd5b60028101805460ff19166001908117909155600580545f90611ac2908490613597565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6001600160a01b03165f9081526001602052604090205460ff1690565b6060611b24611ef7565b5f611b32835f6009546126a4565b6001600160401b03811115611b4957611b4961325e565b604051908082528060200260200182016040528015611b8d57816020015b604080518082019091525f8082526020820152815260200190600190039081611b675790505b506007549091506001600160a01b0390811690851615611bc657506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b03821615801590611bdf57508481105b15611c54576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611c238161357f565b945081518110611c3557611c35613557565b6020908102919091010152600301546001600160a01b03169150611bc8565b80835103611c6757829350505050610aa5565b5f816001600160401b03811115611c8057611c8061325e565b604051908082528060200260200182016040528015611cc457816020015b604080518082019091525f8082526020820152815260200190600190039081611c9e5790505b5090505f5b82811015611d1057848181518110611ce357611ce3613557565b6020026020010151828281518110611cfd57611cfd613557565b6020908102919091010152600101611cc9565b509695505050505050565b611d23611ef7565b6001600160a01b038116611d5157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b611d5a81612482565b50565b6003546060905f906001600160401b03811115611d7c57611d7c61325e565b604051908082528060200260200182016040528015611db557816020015b611da2612f1e565b815260200190600190039081611d9a5790505b5090505f5b600354811015611a0e575f60038281548110611dd857611dd8613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff161515958101959095526003820180549396509194909384019290918591606084019190611e4d90613525565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990613525565b8015611ec45780601f10611e9b57610100808354040283529160200191611ec4565b820191905f5260205f20905b815481529060010190602001808311611ea757829003601f168201915b505050505081525050815250848481518110611ee257611ee2613557565b60209081029190910101525050600101611dba565b33611f297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611d48565b6001600160a01b038082165f9081526006602052604090208054909116611f77575050565b60018101546001600160a01b03831631811015611fd857611fa2816001600160a01b038516316135aa565b82546001600160a01b03165f9081526020819052604081206001018054909190611fcd908490613597565b9091555061201d9050565b611fec6001600160a01b03841631826135aa565b82546001600160a01b03165f90815260208190526040812060010180549091906120179084906135aa565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b03166120685760405163498ea63d60e01b815260040160405180910390fd5b6008546007546001600160a01b039182169116036120a157600780546001600160a01b03199081169091556008805490911690556121b4565b600854336001600160a01b03909116036120fa576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b031990811690915591546008805490931691161790556121b4565b600754336001600160a01b039091160361215e576008546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b03199081169091556007805480861685529290932060030154911692169190911790556121b4565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f8181526020819052604081206001808501549082018054929391929091906121e99084906135aa565b9091555050805460019082905f906122029084906135aa565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556009805491612250836137e1565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122d75f5160206138295f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611d5a611ef7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612363575060408051601f3d908101601f19168201909252612360918101906137f6565b60015b61238b57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d48565b5f5160206138295f395f51905f5281146123bb57604051632a87526960e21b815260048101829052602401611d48565b6106798383612c2f565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f828260405161241f9291906137b3565b60408051918290039091205f8181526002602052919091205490915060ff161561245c57604051637e4c066f60e01b815260040160405180910390fd5b6124668383612c84565b5f908152600260205260409020805460ff191660011790555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124fa612ca5565b611d5a81612cee565b80545f819003612511575050565b5f61251d6001836135aa565b90505b8015610679575f612532826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c61256791906137c2565b90505f84838154811061257c5761257c613557565b5f9182526020909120015485546001600160a01b0390911691508590839081106125a8576125a8613557565b905f5260205f20015f9054906101000a90046001600160a01b03168584815481106125d5576125d5613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508085838154811061261357612613613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050808061264b906137e1565b915050612520565b600c546001600160a01b03165b6001600160a01b0381161561269d576001600160a01b039081165f908152600a6020526040902080546001600160a01b0319811690915516612660565b505f600d55565b5f818311156126d057604051632457cde760e01b81526004810184905260248101839052604401611d48565b828410156126df5750816126f1565b818411156126ee5750806126f1565b50825b9392505050565b6001600160a01b0382165f90815260208181526040808320815160808101835281548152600182015493810193909352600281015460ff1615159183019190915260038101805460608401919061274e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613525565b80156127c55780601f1061279c576101008083540402835291602001916127c5565b820191905f5260205f20905b8154815290600101906020018083116127a857829003601f168201915b505050919092525050604080518082018252600c546001600160a01b03168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549697506128e49693955091850193929091606084019161283e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461286a90613525565b80156128b55780601f1061288c576101008083540402835291602001916128b5565b820191905f5260205f20905b81548152906001019060200180831161289857829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b0316815260200184815250612ad4565b156128f7576128f283612cf6565b612a75565b600c546001600160a01b039081165f818152600a6020526040902054909116905b6001600160a01b038216612935576129308186612d47565b612a72565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff16151594810194909452600381018054612a4295938501939291606084019161299c90613525565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890613525565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b0316815260200186815250612ad4565b15612a51576129308186612d47565b506001600160a01b038082165f908152600a60205260409020541690612918565b50505b8160ff16600d54111561067957600c80546001600160a01b039081165f908152600a6020526040812080546001600160a01b03198082169092558454931692168217909255600d80549192612ac9836137e1565b919050555050505050565b5f81602001516020015183602001516020015103612b045750805182516001600160a01b03918216911611610aa5565b506020908101518101519181015101511190565b80515f819003612b26575050565b5f612b326001836135aa565b90505b8015610679575f612b47826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612b7c91906137c2565b90505f848381518110612b9157612b91613557565b60200260200101519050848281518110612bad57612bad613557565b6020026020010151858481518110612bc757612bc7613557565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110612bfa57612bfa613557565b60200260200101906001600160a01b031690816001600160a01b03168152505050508080612c27906137e1565b915050612b35565b612c3882612da5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c7c576106798282612e08565b610ac6612e7a565b60308114610ac6576040516305db9dbd60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611d23612ca5565b600c80546001600160a01b038381165f818152600a602052604081208054939094166001600160a01b031993841617909355835490911617909155600d805491612d3f8361357f565b919050555050565b6001600160a01b038281165f818152600a602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600d805491612d9c8361357f565b91905055505050565b806001600160a01b03163b5f03612dda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d48565b5f5160206138295f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612e24919061380d565b5f60405180830381855af49150503d805f8114612e5c576040519150601f19603f3d011682016040523d82523d5f602084013e612e61565b606091505b5091509150612e71858383612e99565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b606082612eae57612ea982612ef5565b6126f1565b8151158015612ec557506001600160a01b0384163b155b15612eee57604051639996b31560e01b81526001600160a01b0385166004820152602401611d48565b50806126f1565b805115612f055780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b03168152602001612f6260405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611d5a9190612fe5565b828054828255905f5260205f20908101928215612fd5579160200282015b82811115612fd557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fa0565b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b80356001600160a01b038116811461300f575f5ffd5b919050565b5f60208284031215613024575f5ffd5b6126f182612ff9565b5f5b8381101561304757818101518382015260200161302f565b50505f910152565b5f815180845261306681602086016020860161302d565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a08501526130cb60c085018261304f565b949350505050565b602081525f6126f1602083018461307a565b5f5f602083850312156130f6575f5ffd5b82356001600160401b0381111561310b575f5ffd5b8301601f8101851361311b575f5ffd5b80356001600160401b03811115613130575f5ffd5b8560208260051b8401011115613144575f5ffd5b6020919091019590945092505050565b5f5f60408385031215613165575f5ffd5b61316e83612ff9565b915061317c60208401612ff9565b90509250929050565b5f5f60408385031215613196575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561323a57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613203565b509650505060209384019391909101906001016131cb565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613283575f5ffd5b61328c83612ff9565b915060208301356001600160401b038111156132a6575f5ffd5b8301601f810185136132b6575f5ffd5b80356001600160401b038111156132cf576132cf61325e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156132fd576132fd61325e565b604052818152828201602001871015613314575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112613343575f5ffd5b5081356001600160401b03811115613359575f5ffd5b602083019150836020828501011115613370575f5ffd5b9250929050565b5f5f60208385031215613388575f5ffd5b82356001600160401b0381111561339d575f5ffd5b6133a985828601613333565b90969095509350505050565b5f5f5f5f606085870312156133c8575f5ffd5b6133d185612ff9565b935060208501356001600160401b038111156133eb575f5ffd5b6133f787828801613333565b9094509250506040850135801515811461340f575f5ffd5b939692955090935050565b5f6020828403121561342a575f5ffd5b813560ff811681146126f1575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257603f1987860301845261347c85835161307a565b94506020938401939190910190600101613460565b602081525f6126f1602083018461304f565b5f5f604083850312156134b4575f5ffd5b6134bd83612ff9565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b8181101561351a57835180516001600160a01b0390811685526020918201511681850152909301926040909201916001016134e4565b509095945050505050565b600181811c9082168061353957607f821691505b602082108103611a0e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016135905761359061356b565b5060010190565b80820180821115610aa557610aa561356b565b81810381811115610aa557610aa561356b565b601f82111561067957805f5260205f20601f840160051c810160208510156135e25750805b601f840160051c820191505b818110156112d4575f81556001016135ee565b6001600160401b038311156136185761361861325e565b61362c836136268354613525565b836135bd565b5f601f84116001811461365d575f85156136465750838201355b5f19600387901b1c1916600186901b1783556112d4565b5f83815260208120601f198716915b8281101561368c578685013582556020948501946001909201910161366c565b50868210156136a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b81516001600160401b038111156137125761371261325e565b613726816137208454613525565b846135bd565b6020601f821160018114613758575f83156137415750848201515b5f19600385901b1c1916600184901b1784556112d4565b5f84815260208120601f198516915b828110156137875787850151825560209485019460019092019101613767565b50848210156137a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818382375f9101908152919050565b5f826137dc57634e487b7160e01b5f52601260045260245ffd5b500690565b5f816137ef576137ef61356b565b505f190190565b5f60208284031215613806575f5ffd5b5051919050565b5f825161381e81846020870161302d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220f8a41f8480934bd37eb1d2c06085468af18351db59e5b4d5025a212ec9adf39a64736f6c634300081b0033", - "sourceMap": "2518:17841:37:-:0;;;1171:4:25;1128:48;;2518:17841:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "object": "0x60a0604052306080523480156012575f5ffd5b5060805161387e6100395f395f81816122680152818161229101526123d0015261387e5ff3fe6080604052600436106101af575f3560e01c8063715018a6116100e7578063ad3cb1cc11610087578063eb9019d411610062578063eb9019d4146104a2578063f1bd0b37146104ce578063f2fde38b146104e2578063f3513a3714610501575f5ffd5b8063ad3cb1cc14610422578063b85f5da21461045f578063d04a68c714610473575f5ffd5b8063857861db116100c2578063857861db146103885780638da5cb5b146103a75780639de70258146103ed578063a09686c41461040e575f5ffd5b8063715018a6146103415780637c8a92c3146103555780638129fc1c14610374575f5ffd5b806340f74f471161015257806354fd4d501161012d57806354fd4d50146102d15780635a8eed73146102e4578063602a9eee146103035780636dd7d8ea14610322575f5ffd5b806340f74f471461027e5780634f1ef286146102aa57806352d1902d146102bd575f5ffd5b80631b605b861161018d5780631b605b86146102165780632bdf6d431461022a5780633174b6891461024b5780633d09c2a81461025f575f5ffd5b80630777cbef146101b35780630d2bd909146101d65780631904bb2e146101ea575b5f5ffd5b3480156101be575f5ffd5b506005545b6040519081526020015b60405180910390f35b3480156101e1575f5ffd5b50600d546101c3565b3480156101f5575f5ffd5b50610209610204366004613014565b610515565b6040516101cd91906130d3565b348015610221575f5ffd5b506009546101c3565b348015610235575f5ffd5b506102496102443660046130e5565b610630565b005b348015610256575f5ffd5b5061024961067e565b34801561026a575f5ffd5b50610249610279366004613154565b6106cd565b348015610289575f5ffd5b5061029d610298366004613185565b610918565b6040516101cd91906131a5565b6102496102b8366004613272565b610aab565b3480156102c8575f5ffd5b506101c3610aca565b3480156102dc575f5ffd5b5060016101c3565b3480156102ef575f5ffd5b506102496102fe366004613377565b610ae5565b34801561030e575f5ffd5b5061024961031d366004613377565b610b71565b34801561032d575f5ffd5b5061024961033c366004613014565b610cff565b34801561034c575f5ffd5b50610249610f7d565b348015610360575f5ffd5b5061024961036f3660046133b5565b610f90565b34801561037f575f5ffd5b506102496111cf565b348015610393575f5ffd5b506102496103a236600461341a565b6112db565b3480156103b2575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101cd565b3480156103f8575f5ffd5b50610401611874565b6040516101cd919061343a565b348015610419575f5ffd5b50600f546101c3565b34801561042d575f5ffd5b50610452604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190613491565b34801561046a575f5ffd5b50610249611a14565b34801561047e575f5ffd5b5061049261048d366004613014565b611afd565b60405190151581526020016101cd565b3480156104ad575f5ffd5b506104c16104bc3660046134a3565b611b1a565b6040516101cd91906134cb565b3480156104d9575f5ffd5b506004546101c3565b3480156104ed575f5ffd5b506102496104fc366004613014565b611d1b565b34801561050c575f5ffd5b50610401611d5d565b61051d612f1e565b61052682611afd565b6105435760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549394928501936060840191906105a790613525565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390613525565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b50505091909252505050905292915050565b610638611ef7565b5f5b818110156106795761067183838381811061065757610657613557565b905060200201602081019061066c9190613014565b611f52565b60010161063a565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef336106a8612032565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6106d5611ef7565b600f54156106f6576040516349625b3b60e01b815260040160405180910390fd5b6106ff81611afd565b61071c5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260066020526040902080549091161561075757604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556007541661081457600780546001600160a01b0385166001600160a01b0319918216811790925560088054909116909117905561086c565b600880546001600160a01b039081165f9081526006602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f61087b8361357f565b90915550506001600160a01b038083165f90815260208190526040812060018101805491938716319290916108b1908490613597565b9091555050805460019082905f906108ca908490613597565b9091555050604080516001600160a01b038087168252851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a150505050565b6060610922611ef7565b600f548290841061093457505f610958565b600f546109418486613597565b111561095857600f546109559085906135aa565b90505b5f816001600160401b038111156109715761097161325e565b6040519080825280602002602001820160405280156109b657816020015b604080518082019091525f81526060602082015281526020019060019003908161098f5790505b5090505f5b82811015610aa057604051806040016040528082886109da9190613597565b6109e5906001613597565b8152602001600f6109f6848a613597565b81548110610a0657610a06613557565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610a74575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a2d565b50505050815250828281518110610a8d57610a8d613557565b60209081029190910101526001016109bb565b509150505b92915050565b610ab361225d565b610abc82612301565b610ac68282612309565b5050565b5f610ad36123c5565b505f5160206138295f395f51905f5290565b610aee33611afd565b610b0b5760405163510b8aad60e11b815260040160405180910390fd5b610b15828261240e565b335f908152602081905260409020600301610b31828483613601565b507f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c917032338383604051610b65939291906136ba565b60405180910390a15050565b335f9081526001602052604090205460ff1615610ba15760405163132e7efb60e31b815260040160405180910390fd5b610bab828261240e565b5f60405180608001604052805f81526020015f81526020015f1515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050600480549394509150610c148361357f565b9091555050335f908152600160208181526040808420805460ff19908116851790915584835293819020855181559185015192820192909255908301516002820180549093169015151790915560608201518291906003820190610c7890826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556040517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9250610cf29190869086906136ba565b60405180910390a1505050565b610d0881611afd565b610d255760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f908152602081905260409020600281015460ff1615610d625760405163510ae2bd60e11b815260040160405180910390fd5b806003018054610d7190613525565b90505f03610d925760405163970c784d60e01b815260040160405180910390fd5b335f90815260066020526040902080546001600160a01b03848116911603610dcd57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610de757610de5612032565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560075416610e995760078054336001600160a01b03199182168117909255600880549091169091179055610ef0565b600880546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f610eff8361357f565b9190505550336001600160a01b031631826001015f828254610f219190613597565b9091555050815460019083905f90610f3a908490613597565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e29101610cf2565b610f85611ef7565b610f8e5f612482565b565b610f98611ef7565b600f5415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f84846040516110059291906137b3565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f838361240e565b5f60405180608001604052805f81526020015f8152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506004805493945091506110b88361357f565b90915550506001600160a01b0385165f908152600160208181526040808420805460ff1990811685179091558483529381902085518155918501519282019290925590830151600282018054909316901515179091556060820151829190600382019061112590826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03881617905550811561118d5760058054905f6111878361357f565b91905055505b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516111c0939291906136ba565b60405180910390a15050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112135750825b90505f826001600160401b0316600114801561122e5750303b155b90508115801561123c575080155b1561125a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128457845460ff60401b1916600160401b1785555b61128d336124f2565b6001600e5583156112d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016111c0565b5050505050565b6112e3611ef7565b8060ff165f0361130657604051630e52390960e41b815260040160405180910390fd5b60ff8116600e556113176003612503565b61131f612653565b600c80546001600160a01b03191690556005546004545f916113519160ff851691849161134c91906135aa565b6126a4565b90508060ff165f03611376576040516367c0fced60e01b815260040160405180910390fd5b5f5b600354811015611638575f6003828154811061139657611396613557565b5f9182526020808320909101546001600160a01b031680835290829052604090912060028101549192509060ff16806113dd57508060030180546113d990613525565b1590505b156113e9575050611630565b600c546001600160a01b03166114245750600c80546001600160a01b0319166001600160a01b03929092169190911790556001600d55611630565b8360ff16600d5410156114425761143b82856126f8565b5050611630565b600c546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160808101845285548152600186015481840152600286015460ff16151593810193909352600385018054919461161d949093840192909187916060840191906114b590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546114e190613525565b801561152c5780601f106115035761010080835404028352916020019161152c565b820191905f5260205f20905b81548152906001019060200180831161150f57829003601f168201915b505050919092525050509052604080518082018252600c546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff1615159382019390935260038601805492938401928791606084019161159590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190613525565b801561160c5780601f106115e35761010080835404028352916020019161160c565b820191905f5260205f20905b8154815290600101906020018083116115ef57829003601f168201915b505050505081525050815250612ad4565b1561162c5761162c83866126f8565b5050505b600101611378565b50600d545f0361165b576040516367c0fced60e01b815260040160405180910390fd5b600c54600d546001600160a01b03909116905f906001600160401b038111156116865761168661325e565b6040519080825280602002602001820160405280156116af578160200160208202803683370190505b5090505f5b600d5481101561170957828282815181106116d1576116d1613557565b6001600160a01b039283166020918202929092018101919091529381165f908152600a909452604090932054909216916001016116b4565b5061171381612b18565b600f80546001810182555f9182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802019061175090600b90612f67565b600e546001600160401b0381111561176a5761176a61325e565b604051908082528060200260200182016040528015611793578160200160208202803683370190505b5080516117a891600b91602090910190612f82565b505f5b600e5481101561186c575f83600d54836117c591906137c2565b815181106117d5576117d5613557565b6020026020010151905080600b83815481106117f3576117f3613557565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832060019081015486840190815288548083018a55898652939094209551600290930290950180549290941691161782555190820155016117ab565b505050505050565b600b546060905f906001600160401b038111156118935761189361325e565b6040519080825280602002602001820160405280156118cc57816020015b6118b9612f1e565b8152602001906001900390816118b15790505b5090505f5b600b54811015611a0e575f600b82815481106118ef576118ef613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff16151595810195909552600382018054939650919490938401929091859160608401919061196490613525565b80601f016020809104026020016040519081016040528092919081815260200182805461199090613525565b80156119db5780601f106119b2576101008083540402835291602001916119db565b820191905f5260205f20905b8154815290600101906020018083116119be57829003601f168201915b5050505050815250508152508484815181106119f9576119f9613557565b602090810291909101015250506001016118d1565b50919050565b611a1d33611afd565b611a3a5760405163668191af60e11b815260040160405180910390fd5b335f908152602081905260409020600281015460ff1615611a6e57604051632d8b5c9760e21b815260040160405180910390fd5b600e54600554600454611a8191906135aa565b11611a9f57604051633b15f1f760e21b815260040160405180910390fd5b60028101805460ff19166001908117909155600580545f90611ac2908490613597565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6001600160a01b03165f9081526001602052604090205460ff1690565b6060611b24611ef7565b5f611b32835f6009546126a4565b6001600160401b03811115611b4957611b4961325e565b604051908082528060200260200182016040528015611b8d57816020015b604080518082019091525f8082526020820152815260200190600190039081611b675790505b506007549091506001600160a01b0390811690851615611bc657506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b03821615801590611bdf57508481105b15611c54576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611c238161357f565b945081518110611c3557611c35613557565b6020908102919091010152600301546001600160a01b03169150611bc8565b80835103611c6757829350505050610aa5565b5f816001600160401b03811115611c8057611c8061325e565b604051908082528060200260200182016040528015611cc457816020015b604080518082019091525f8082526020820152815260200190600190039081611c9e5790505b5090505f5b82811015611d1057848181518110611ce357611ce3613557565b6020026020010151828281518110611cfd57611cfd613557565b6020908102919091010152600101611cc9565b509695505050505050565b611d23611ef7565b6001600160a01b038116611d5157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b611d5a81612482565b50565b6003546060905f906001600160401b03811115611d7c57611d7c61325e565b604051908082528060200260200182016040528015611db557816020015b611da2612f1e565b815260200190600190039081611d9a5790505b5090505f5b600354811015611a0e575f60038281548110611dd857611dd8613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff161515958101959095526003820180549396509194909384019290918591606084019190611e4d90613525565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990613525565b8015611ec45780601f10611e9b57610100808354040283529160200191611ec4565b820191905f5260205f20905b815481529060010190602001808311611ea757829003601f168201915b505050505081525050815250848481518110611ee257611ee2613557565b60209081029190910101525050600101611dba565b33611f297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611d48565b6001600160a01b038082165f9081526006602052604090208054909116611f77575050565b60018101546001600160a01b03831631811015611fd857611fa2816001600160a01b038516316135aa565b82546001600160a01b03165f9081526020819052604081206001018054909190611fcd908490613597565b9091555061201d9050565b611fec6001600160a01b03841631826135aa565b82546001600160a01b03165f90815260208190526040812060010180549091906120179084906135aa565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b03166120685760405163498ea63d60e01b815260040160405180910390fd5b6008546007546001600160a01b039182169116036120a157600780546001600160a01b03199081169091556008805490911690556121b4565b600854336001600160a01b03909116036120fa576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b031990811690915591546008805490931691161790556121b4565b600754336001600160a01b039091160361215e576008546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b03199081169091556007805480861685529290932060030154911692169190911790556121b4565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f8181526020819052604081206001808501549082018054929391929091906121e99084906135aa565b9091555050805460019082905f906122029084906135aa565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556009805491612250836137e1565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122d75f5160206138295f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611d5a611ef7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612363575060408051601f3d908101601f19168201909252612360918101906137f6565b60015b61238b57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d48565b5f5160206138295f395f51905f5281146123bb57604051632a87526960e21b815260048101829052602401611d48565b6106798383612c2f565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f828260405161241f9291906137b3565b60408051918290039091205f8181526002602052919091205490915060ff161561245c57604051637e4c066f60e01b815260040160405180910390fd5b6124668383612c84565b5f908152600260205260409020805460ff191660011790555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124fa612ca5565b611d5a81612cee565b80545f819003612511575050565b5f61251d6001836135aa565b90505b8015610679575f612532826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c61256791906137c2565b90505f84838154811061257c5761257c613557565b5f9182526020909120015485546001600160a01b0390911691508590839081106125a8576125a8613557565b905f5260205f20015f9054906101000a90046001600160a01b03168584815481106125d5576125d5613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508085838154811061261357612613613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050808061264b906137e1565b915050612520565b600c546001600160a01b03165b6001600160a01b0381161561269d576001600160a01b039081165f908152600a6020526040902080546001600160a01b0319811690915516612660565b505f600d55565b5f818311156126d057604051632457cde760e01b81526004810184905260248101839052604401611d48565b828410156126df5750816126f1565b818411156126ee5750806126f1565b50825b9392505050565b6001600160a01b0382165f90815260208181526040808320815160808101835281548152600182015493810193909352600281015460ff1615159183019190915260038101805460608401919061274e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613525565b80156127c55780601f1061279c576101008083540402835291602001916127c5565b820191905f5260205f20905b8154815290600101906020018083116127a857829003601f168201915b505050919092525050604080518082018252600c546001600160a01b03168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549697506128e49693955091850193929091606084019161283e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461286a90613525565b80156128b55780601f1061288c576101008083540402835291602001916128b5565b820191905f5260205f20905b81548152906001019060200180831161289857829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b0316815260200184815250612ad4565b156128f7576128f283612cf6565b612a75565b600c546001600160a01b039081165f818152600a6020526040902054909116905b6001600160a01b038216612935576129308186612d47565b612a72565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff16151594810194909452600381018054612a4295938501939291606084019161299c90613525565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890613525565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b0316815260200186815250612ad4565b15612a51576129308186612d47565b506001600160a01b038082165f908152600a60205260409020541690612918565b50505b8160ff16600d54111561067957600c80546001600160a01b039081165f908152600a6020526040812080546001600160a01b03198082169092558454931692168217909255600d80549192612ac9836137e1565b919050555050505050565b5f81602001516020015183602001516020015103612b045750805182516001600160a01b03918216911611610aa5565b506020908101518101519181015101511190565b80515f819003612b26575050565b5f612b326001836135aa565b90505b8015610679575f612b47826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612b7c91906137c2565b90505f848381518110612b9157612b91613557565b60200260200101519050848281518110612bad57612bad613557565b6020026020010151858481518110612bc757612bc7613557565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110612bfa57612bfa613557565b60200260200101906001600160a01b031690816001600160a01b03168152505050508080612c27906137e1565b915050612b35565b612c3882612da5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c7c576106798282612e08565b610ac6612e7a565b60308114610ac6576040516305db9dbd60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611d23612ca5565b600c80546001600160a01b038381165f818152600a602052604081208054939094166001600160a01b031993841617909355835490911617909155600d805491612d3f8361357f565b919050555050565b6001600160a01b038281165f818152600a602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600d805491612d9c8361357f565b91905055505050565b806001600160a01b03163b5f03612dda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d48565b5f5160206138295f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612e24919061380d565b5f60405180830381855af49150503d805f8114612e5c576040519150601f19603f3d011682016040523d82523d5f602084013e612e61565b606091505b5091509150612e71858383612e99565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b606082612eae57612ea982612ef5565b6126f1565b8151158015612ec557506001600160a01b0384163b155b15612eee57604051639996b31560e01b81526001600160a01b0385166004820152602401611d48565b50806126f1565b805115612f055780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b03168152602001612f6260405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611d5a9190612fe5565b828054828255905f5260205f20908101928215612fd5579160200282015b82811115612fd557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fa0565b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b80356001600160a01b038116811461300f575f5ffd5b919050565b5f60208284031215613024575f5ffd5b6126f182612ff9565b5f5b8381101561304757818101518382015260200161302f565b50505f910152565b5f815180845261306681602086016020860161302d565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a08501526130cb60c085018261304f565b949350505050565b602081525f6126f1602083018461307a565b5f5f602083850312156130f6575f5ffd5b82356001600160401b0381111561310b575f5ffd5b8301601f8101851361311b575f5ffd5b80356001600160401b03811115613130575f5ffd5b8560208260051b8401011115613144575f5ffd5b6020919091019590945092505050565b5f5f60408385031215613165575f5ffd5b61316e83612ff9565b915061317c60208401612ff9565b90509250929050565b5f5f60408385031215613196575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561323a57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613203565b509650505060209384019391909101906001016131cb565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613283575f5ffd5b61328c83612ff9565b915060208301356001600160401b038111156132a6575f5ffd5b8301601f810185136132b6575f5ffd5b80356001600160401b038111156132cf576132cf61325e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156132fd576132fd61325e565b604052818152828201602001871015613314575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112613343575f5ffd5b5081356001600160401b03811115613359575f5ffd5b602083019150836020828501011115613370575f5ffd5b9250929050565b5f5f60208385031215613388575f5ffd5b82356001600160401b0381111561339d575f5ffd5b6133a985828601613333565b90969095509350505050565b5f5f5f5f606085870312156133c8575f5ffd5b6133d185612ff9565b935060208501356001600160401b038111156133eb575f5ffd5b6133f787828801613333565b9094509250506040850135801515811461340f575f5ffd5b939692955090935050565b5f6020828403121561342a575f5ffd5b813560ff811681146126f1575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257603f1987860301845261347c85835161307a565b94506020938401939190910190600101613460565b602081525f6126f1602083018461304f565b5f5f604083850312156134b4575f5ffd5b6134bd83612ff9565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b8181101561351a57835180516001600160a01b0390811685526020918201511681850152909301926040909201916001016134e4565b509095945050505050565b600181811c9082168061353957607f821691505b602082108103611a0e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016135905761359061356b565b5060010190565b80820180821115610aa557610aa561356b565b81810381811115610aa557610aa561356b565b601f82111561067957805f5260205f20601f840160051c810160208510156135e25750805b601f840160051c820191505b818110156112d4575f81556001016135ee565b6001600160401b038311156136185761361861325e565b61362c836136268354613525565b836135bd565b5f601f84116001811461365d575f85156136465750838201355b5f19600387901b1c1916600186901b1783556112d4565b5f83815260208120601f198716915b8281101561368c578685013582556020948501946001909201910161366c565b50868210156136a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b81516001600160401b038111156137125761371261325e565b613726816137208454613525565b846135bd565b6020601f821160018114613758575f83156137415750848201515b5f19600385901b1c1916600184901b1784556112d4565b5f84815260208120601f198516915b828110156137875787850151825560209485019460019092019101613767565b50848210156137a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818382375f9101908152919050565b5f826137dc57634e487b7160e01b5f52601260045260245ffd5b500690565b5f816137ef576137ef61356b565b505f190190565b5f60208284031215613806575f5ffd5b5051919050565b5f825161381e81846020870161302d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220983e2d933e18f12cab95985824dc16db07106a30fc15cd31c83493c6e0e0f72b64736f6c634300081b0033", + "sourceMap": "1266:19289:37:-:0;;;1171:4:25;1128:48;;1266:19289:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "linkReferences": {} }, "deployedBytecode": { - "object": "0x6080604052600436106101af575f3560e01c8063715018a6116100e7578063ad3cb1cc11610087578063eb9019d411610062578063eb9019d4146104a2578063f1bd0b37146104ce578063f2fde38b146104e2578063f3513a3714610501575f5ffd5b8063ad3cb1cc14610422578063b85f5da21461045f578063d04a68c714610473575f5ffd5b8063857861db116100c2578063857861db146103885780638da5cb5b146103a75780639de70258146103ed578063a09686c41461040e575f5ffd5b8063715018a6146103415780637c8a92c3146103555780638129fc1c14610374575f5ffd5b806340f74f471161015257806354fd4d501161012d57806354fd4d50146102d15780635a8eed73146102e4578063602a9eee146103035780636dd7d8ea14610322575f5ffd5b806340f74f471461027e5780634f1ef286146102aa57806352d1902d146102bd575f5ffd5b80631b605b861161018d5780631b605b86146102165780632bdf6d431461022a5780633174b6891461024b5780633d09c2a81461025f575f5ffd5b80630777cbef146101b35780630d2bd909146101d65780631904bb2e146101ea575b5f5ffd5b3480156101be575f5ffd5b506005545b6040519081526020015b60405180910390f35b3480156101e1575f5ffd5b50600d546101c3565b3480156101f5575f5ffd5b50610209610204366004613014565b610515565b6040516101cd91906130d3565b348015610221575f5ffd5b506009546101c3565b348015610235575f5ffd5b506102496102443660046130e5565b610630565b005b348015610256575f5ffd5b5061024961067e565b34801561026a575f5ffd5b50610249610279366004613154565b6106cd565b348015610289575f5ffd5b5061029d610298366004613185565b610918565b6040516101cd91906131a5565b6102496102b8366004613272565b610aab565b3480156102c8575f5ffd5b506101c3610aca565b3480156102dc575f5ffd5b5060016101c3565b3480156102ef575f5ffd5b506102496102fe366004613377565b610ae5565b34801561030e575f5ffd5b5061024961031d366004613377565b610b71565b34801561032d575f5ffd5b5061024961033c366004613014565b610cff565b34801561034c575f5ffd5b50610249610f7d565b348015610360575f5ffd5b5061024961036f3660046133b5565b610f90565b34801561037f575f5ffd5b506102496111cf565b348015610393575f5ffd5b506102496103a236600461341a565b6112db565b3480156103b2575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101cd565b3480156103f8575f5ffd5b50610401611874565b6040516101cd919061343a565b348015610419575f5ffd5b50600f546101c3565b34801561042d575f5ffd5b50610452604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190613491565b34801561046a575f5ffd5b50610249611a14565b34801561047e575f5ffd5b5061049261048d366004613014565b611afd565b60405190151581526020016101cd565b3480156104ad575f5ffd5b506104c16104bc3660046134a3565b611b1a565b6040516101cd91906134cb565b3480156104d9575f5ffd5b506004546101c3565b3480156104ed575f5ffd5b506102496104fc366004613014565b611d1b565b34801561050c575f5ffd5b50610401611d5d565b61051d612f1e565b61052682611afd565b6105435760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549394928501936060840191906105a790613525565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390613525565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b50505091909252505050905292915050565b610638611ef7565b5f5b818110156106795761067183838381811061065757610657613557565b905060200201602081019061066c9190613014565b611f52565b60010161063a565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef336106a8612032565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6106d5611ef7565b600f54156106f6576040516349625b3b60e01b815260040160405180910390fd5b6106ff81611afd565b61071c5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260066020526040902080549091161561075757604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556007541661081457600780546001600160a01b0385166001600160a01b0319918216811790925560088054909116909117905561086c565b600880546001600160a01b039081165f9081526006602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f61087b8361357f565b90915550506001600160a01b038083165f90815260208190526040812060018101805491938716319290916108b1908490613597565b9091555050805460019082905f906108ca908490613597565b9091555050604080516001600160a01b038087168252851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a150505050565b6060610922611ef7565b600f548290841061093457505f610958565b600f546109418486613597565b111561095857600f546109559085906135aa565b90505b5f816001600160401b038111156109715761097161325e565b6040519080825280602002602001820160405280156109b657816020015b604080518082019091525f81526060602082015281526020019060019003908161098f5790505b5090505f5b82811015610aa057604051806040016040528082886109da9190613597565b6109e5906001613597565b8152602001600f6109f6848a613597565b81548110610a0657610a06613557565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610a74575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a2d565b50505050815250828281518110610a8d57610a8d613557565b60209081029190910101526001016109bb565b509150505b92915050565b610ab361225d565b610abc82612301565b610ac68282612309565b5050565b5f610ad36123c5565b505f5160206138295f395f51905f5290565b610aee33611afd565b610b0b5760405163510b8aad60e11b815260040160405180910390fd5b610b15828261240e565b335f908152602081905260409020600301610b31828483613601565b507f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c917032338383604051610b65939291906136ba565b60405180910390a15050565b335f9081526001602052604090205460ff1615610ba15760405163132e7efb60e31b815260040160405180910390fd5b610bab828261240e565b5f60405180608001604052805f81526020015f81526020015f1515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050600480549394509150610c148361357f565b9091555050335f908152600160208181526040808420805460ff19908116851790915584835293819020855181559185015192820192909255908301516002820180549093169015151790915560608201518291906003820190610c7890826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556040517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9250610cf29190869086906136ba565b60405180910390a1505050565b610d0881611afd565b610d255760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f908152602081905260409020600281015460ff1615610d625760405163510ae2bd60e11b815260040160405180910390fd5b806003018054610d7190613525565b90505f03610d925760405163970c784d60e01b815260040160405180910390fd5b335f90815260066020526040902080546001600160a01b03848116911603610dcd57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610de757610de5612032565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560075416610e995760078054336001600160a01b03199182168117909255600880549091169091179055610ef0565b600880546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f610eff8361357f565b9190505550336001600160a01b031631826001015f828254610f219190613597565b9091555050815460019083905f90610f3a908490613597565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e29101610cf2565b610f85611ef7565b610f8e5f612482565b565b610f98611ef7565b600f5415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f84846040516110059291906137b3565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f838361240e565b5f60405180608001604052805f81526020015f8152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506004805493945091506110b88361357f565b90915550506001600160a01b0385165f908152600160208181526040808420805460ff1990811685179091558483529381902085518155918501519282019290925590830151600282018054909316901515179091556060820151829190600382019061112590826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03881617905550811561118d5760058054905f6111878361357f565b91905055505b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516111c0939291906136ba565b60405180910390a15050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112135750825b90505f826001600160401b0316600114801561122e5750303b155b90508115801561123c575080155b1561125a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128457845460ff60401b1916600160401b1785555b61128d336124f2565b6001600e5583156112d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016111c0565b5050505050565b6112e3611ef7565b8060ff165f0361130657604051630e52390960e41b815260040160405180910390fd5b60ff8116600e556113176003612503565b61131f612653565b600c80546001600160a01b03191690556005546004545f916113519160ff851691849161134c91906135aa565b6126a4565b90508060ff165f03611376576040516367c0fced60e01b815260040160405180910390fd5b5f5b600354811015611638575f6003828154811061139657611396613557565b5f9182526020808320909101546001600160a01b031680835290829052604090912060028101549192509060ff16806113dd57508060030180546113d990613525565b1590505b156113e9575050611630565b600c546001600160a01b03166114245750600c80546001600160a01b0319166001600160a01b03929092169190911790556001600d55611630565b8360ff16600d5410156114425761143b82856126f8565b5050611630565b600c546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160808101845285548152600186015481840152600286015460ff16151593810193909352600385018054919461161d949093840192909187916060840191906114b590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546114e190613525565b801561152c5780601f106115035761010080835404028352916020019161152c565b820191905f5260205f20905b81548152906001019060200180831161150f57829003601f168201915b505050919092525050509052604080518082018252600c546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff1615159382019390935260038601805492938401928791606084019161159590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190613525565b801561160c5780601f106115e35761010080835404028352916020019161160c565b820191905f5260205f20905b8154815290600101906020018083116115ef57829003601f168201915b505050505081525050815250612ad4565b1561162c5761162c83866126f8565b5050505b600101611378565b50600d545f0361165b576040516367c0fced60e01b815260040160405180910390fd5b600c54600d546001600160a01b03909116905f906001600160401b038111156116865761168661325e565b6040519080825280602002602001820160405280156116af578160200160208202803683370190505b5090505f5b600d5481101561170957828282815181106116d1576116d1613557565b6001600160a01b039283166020918202929092018101919091529381165f908152600a909452604090932054909216916001016116b4565b5061171381612b18565b600f80546001810182555f9182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802019061175090600b90612f67565b600e546001600160401b0381111561176a5761176a61325e565b604051908082528060200260200182016040528015611793578160200160208202803683370190505b5080516117a891600b91602090910190612f82565b505f5b600e5481101561186c575f83600d54836117c591906137c2565b815181106117d5576117d5613557565b6020026020010151905080600b83815481106117f3576117f3613557565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832060019081015486840190815288548083018a55898652939094209551600290930290950180549290941691161782555190820155016117ab565b505050505050565b600b546060905f906001600160401b038111156118935761189361325e565b6040519080825280602002602001820160405280156118cc57816020015b6118b9612f1e565b8152602001906001900390816118b15790505b5090505f5b600b54811015611a0e575f600b82815481106118ef576118ef613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff16151595810195909552600382018054939650919490938401929091859160608401919061196490613525565b80601f016020809104026020016040519081016040528092919081815260200182805461199090613525565b80156119db5780601f106119b2576101008083540402835291602001916119db565b820191905f5260205f20905b8154815290600101906020018083116119be57829003601f168201915b5050505050815250508152508484815181106119f9576119f9613557565b602090810291909101015250506001016118d1565b50919050565b611a1d33611afd565b611a3a5760405163668191af60e11b815260040160405180910390fd5b335f908152602081905260409020600281015460ff1615611a6e57604051632d8b5c9760e21b815260040160405180910390fd5b600e54600554600454611a8191906135aa565b11611a9f57604051633b15f1f760e21b815260040160405180910390fd5b60028101805460ff19166001908117909155600580545f90611ac2908490613597565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6001600160a01b03165f9081526001602052604090205460ff1690565b6060611b24611ef7565b5f611b32835f6009546126a4565b6001600160401b03811115611b4957611b4961325e565b604051908082528060200260200182016040528015611b8d57816020015b604080518082019091525f8082526020820152815260200190600190039081611b675790505b506007549091506001600160a01b0390811690851615611bc657506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b03821615801590611bdf57508481105b15611c54576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611c238161357f565b945081518110611c3557611c35613557565b6020908102919091010152600301546001600160a01b03169150611bc8565b80835103611c6757829350505050610aa5565b5f816001600160401b03811115611c8057611c8061325e565b604051908082528060200260200182016040528015611cc457816020015b604080518082019091525f8082526020820152815260200190600190039081611c9e5790505b5090505f5b82811015611d1057848181518110611ce357611ce3613557565b6020026020010151828281518110611cfd57611cfd613557565b6020908102919091010152600101611cc9565b509695505050505050565b611d23611ef7565b6001600160a01b038116611d5157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b611d5a81612482565b50565b6003546060905f906001600160401b03811115611d7c57611d7c61325e565b604051908082528060200260200182016040528015611db557816020015b611da2612f1e565b815260200190600190039081611d9a5790505b5090505f5b600354811015611a0e575f60038281548110611dd857611dd8613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff161515958101959095526003820180549396509194909384019290918591606084019190611e4d90613525565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990613525565b8015611ec45780601f10611e9b57610100808354040283529160200191611ec4565b820191905f5260205f20905b815481529060010190602001808311611ea757829003601f168201915b505050505081525050815250848481518110611ee257611ee2613557565b60209081029190910101525050600101611dba565b33611f297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611d48565b6001600160a01b038082165f9081526006602052604090208054909116611f77575050565b60018101546001600160a01b03831631811015611fd857611fa2816001600160a01b038516316135aa565b82546001600160a01b03165f9081526020819052604081206001018054909190611fcd908490613597565b9091555061201d9050565b611fec6001600160a01b03841631826135aa565b82546001600160a01b03165f90815260208190526040812060010180549091906120179084906135aa565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b03166120685760405163498ea63d60e01b815260040160405180910390fd5b6008546007546001600160a01b039182169116036120a157600780546001600160a01b03199081169091556008805490911690556121b4565b600854336001600160a01b03909116036120fa576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b031990811690915591546008805490931691161790556121b4565b600754336001600160a01b039091160361215e576008546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b03199081169091556007805480861685529290932060030154911692169190911790556121b4565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f8181526020819052604081206001808501549082018054929391929091906121e99084906135aa565b9091555050805460019082905f906122029084906135aa565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556009805491612250836137e1565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122d75f5160206138295f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611d5a611ef7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612363575060408051601f3d908101601f19168201909252612360918101906137f6565b60015b61238b57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d48565b5f5160206138295f395f51905f5281146123bb57604051632a87526960e21b815260048101829052602401611d48565b6106798383612c2f565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f828260405161241f9291906137b3565b60408051918290039091205f8181526002602052919091205490915060ff161561245c57604051637e4c066f60e01b815260040160405180910390fd5b6124668383612c84565b5f908152600260205260409020805460ff191660011790555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124fa612ca5565b611d5a81612cee565b80545f819003612511575050565b5f61251d6001836135aa565b90505b8015610679575f612532826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c61256791906137c2565b90505f84838154811061257c5761257c613557565b5f9182526020909120015485546001600160a01b0390911691508590839081106125a8576125a8613557565b905f5260205f20015f9054906101000a90046001600160a01b03168584815481106125d5576125d5613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508085838154811061261357612613613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050808061264b906137e1565b915050612520565b600c546001600160a01b03165b6001600160a01b0381161561269d576001600160a01b039081165f908152600a6020526040902080546001600160a01b0319811690915516612660565b505f600d55565b5f818311156126d057604051632457cde760e01b81526004810184905260248101839052604401611d48565b828410156126df5750816126f1565b818411156126ee5750806126f1565b50825b9392505050565b6001600160a01b0382165f90815260208181526040808320815160808101835281548152600182015493810193909352600281015460ff1615159183019190915260038101805460608401919061274e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613525565b80156127c55780601f1061279c576101008083540402835291602001916127c5565b820191905f5260205f20905b8154815290600101906020018083116127a857829003601f168201915b505050919092525050604080518082018252600c546001600160a01b03168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549697506128e49693955091850193929091606084019161283e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461286a90613525565b80156128b55780601f1061288c576101008083540402835291602001916128b5565b820191905f5260205f20905b81548152906001019060200180831161289857829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b0316815260200184815250612ad4565b156128f7576128f283612cf6565b612a75565b600c546001600160a01b039081165f818152600a6020526040902054909116905b6001600160a01b038216612935576129308186612d47565b612a72565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff16151594810194909452600381018054612a4295938501939291606084019161299c90613525565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890613525565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b0316815260200186815250612ad4565b15612a51576129308186612d47565b506001600160a01b038082165f908152600a60205260409020541690612918565b50505b8160ff16600d54111561067957600c80546001600160a01b039081165f908152600a6020526040812080546001600160a01b03198082169092558454931692168217909255600d80549192612ac9836137e1565b919050555050505050565b5f81602001516020015183602001516020015103612b045750805182516001600160a01b03918216911611610aa5565b506020908101518101519181015101511190565b80515f819003612b26575050565b5f612b326001836135aa565b90505b8015610679575f612b47826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612b7c91906137c2565b90505f848381518110612b9157612b91613557565b60200260200101519050848281518110612bad57612bad613557565b6020026020010151858481518110612bc757612bc7613557565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110612bfa57612bfa613557565b60200260200101906001600160a01b031690816001600160a01b03168152505050508080612c27906137e1565b915050612b35565b612c3882612da5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c7c576106798282612e08565b610ac6612e7a565b60308114610ac6576040516305db9dbd60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611d23612ca5565b600c80546001600160a01b038381165f818152600a602052604081208054939094166001600160a01b031993841617909355835490911617909155600d805491612d3f8361357f565b919050555050565b6001600160a01b038281165f818152600a602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600d805491612d9c8361357f565b91905055505050565b806001600160a01b03163b5f03612dda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d48565b5f5160206138295f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612e24919061380d565b5f60405180830381855af49150503d805f8114612e5c576040519150601f19603f3d011682016040523d82523d5f602084013e612e61565b606091505b5091509150612e71858383612e99565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b606082612eae57612ea982612ef5565b6126f1565b8151158015612ec557506001600160a01b0384163b155b15612eee57604051639996b31560e01b81526001600160a01b0385166004820152602401611d48565b50806126f1565b805115612f055780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b03168152602001612f6260405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611d5a9190612fe5565b828054828255905f5260205f20908101928215612fd5579160200282015b82811115612fd557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fa0565b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b80356001600160a01b038116811461300f575f5ffd5b919050565b5f60208284031215613024575f5ffd5b6126f182612ff9565b5f5b8381101561304757818101518382015260200161302f565b50505f910152565b5f815180845261306681602086016020860161302d565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a08501526130cb60c085018261304f565b949350505050565b602081525f6126f1602083018461307a565b5f5f602083850312156130f6575f5ffd5b82356001600160401b0381111561310b575f5ffd5b8301601f8101851361311b575f5ffd5b80356001600160401b03811115613130575f5ffd5b8560208260051b8401011115613144575f5ffd5b6020919091019590945092505050565b5f5f60408385031215613165575f5ffd5b61316e83612ff9565b915061317c60208401612ff9565b90509250929050565b5f5f60408385031215613196575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561323a57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613203565b509650505060209384019391909101906001016131cb565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613283575f5ffd5b61328c83612ff9565b915060208301356001600160401b038111156132a6575f5ffd5b8301601f810185136132b6575f5ffd5b80356001600160401b038111156132cf576132cf61325e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156132fd576132fd61325e565b604052818152828201602001871015613314575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112613343575f5ffd5b5081356001600160401b03811115613359575f5ffd5b602083019150836020828501011115613370575f5ffd5b9250929050565b5f5f60208385031215613388575f5ffd5b82356001600160401b0381111561339d575f5ffd5b6133a985828601613333565b90969095509350505050565b5f5f5f5f606085870312156133c8575f5ffd5b6133d185612ff9565b935060208501356001600160401b038111156133eb575f5ffd5b6133f787828801613333565b9094509250506040850135801515811461340f575f5ffd5b939692955090935050565b5f6020828403121561342a575f5ffd5b813560ff811681146126f1575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257603f1987860301845261347c85835161307a565b94506020938401939190910190600101613460565b602081525f6126f1602083018461304f565b5f5f604083850312156134b4575f5ffd5b6134bd83612ff9565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b8181101561351a57835180516001600160a01b0390811685526020918201511681850152909301926040909201916001016134e4565b509095945050505050565b600181811c9082168061353957607f821691505b602082108103611a0e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016135905761359061356b565b5060010190565b80820180821115610aa557610aa561356b565b81810381811115610aa557610aa561356b565b601f82111561067957805f5260205f20601f840160051c810160208510156135e25750805b601f840160051c820191505b818110156112d4575f81556001016135ee565b6001600160401b038311156136185761361861325e565b61362c836136268354613525565b836135bd565b5f601f84116001811461365d575f85156136465750838201355b5f19600387901b1c1916600186901b1783556112d4565b5f83815260208120601f198716915b8281101561368c578685013582556020948501946001909201910161366c565b50868210156136a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b81516001600160401b038111156137125761371261325e565b613726816137208454613525565b846135bd565b6020601f821160018114613758575f83156137415750848201515b5f19600385901b1c1916600184901b1784556112d4565b5f84815260208120601f198516915b828110156137875787850151825560209485019460019092019101613767565b50848210156137a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818382375f9101908152919050565b5f826137dc57634e487b7160e01b5f52601260045260245ffd5b500690565b5f816137ef576137ef61356b565b505f190190565b5f60208284031215613806575f5ffd5b5051919050565b5f825161381e81846020870161302d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220f8a41f8480934bd37eb1d2c06085468af18351db59e5b4d5025a212ec9adf39a64736f6c634300081b0033", - "sourceMap": "2518:17841:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11326:115;;;;;;;;;;-1:-1:-1;11410:24:37;;11326:115;;;160:25:50;;;148:2;133:18;11326:115:37;;;;;;;;11447:111;;;;;;;;;;-1:-1:-1;11529:22:37;;11447:111;;11685:253;;;;;;;;;;-1:-1:-1;11685:253:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12801:93::-;;;;;;;;;;-1:-1:-1;12875:12:37;;12801:93;;8541:176;;;;;;;;;;-1:-1:-1;8541:176:37;;;;;:::i;:::-;;:::i;:::-;;8456:79;;;;;;;;;;;;;:::i;4679:1019::-;;;;;;;;;;-1:-1:-1;4679:1019:37;;;;;:::i;:::-;;:::i;13855:531::-;;;;;;;;;;-1:-1:-1;13855:531:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4161:214:25:-;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;11129:76:37:-;;;;;;;;;;-1:-1:-1;11197:1:37;11129:76;;6306:354;;;;;;;;;;-1:-1:-1;6306:354:37;;;;;:::i;:::-;;:::i;5704:596::-;;;;;;;;;;-1:-1:-1;5704:596:37;;;;;:::i;:::-;;:::i;7235:1215::-;;;;;;;;;;-1:-1:-1;7235:1215:37;;;;;:::i;:::-;;:::i;3155:101:23:-;;;;;;;;;;;;;:::i;3689:984:37:-;;;;;;;;;;-1:-1:-1;3689:984:37;;;;;:::i;:::-;;:::i;3438:112::-;;;;;;;;;;;;;:::i;8723:2360::-;;;;;;;;;;-1:-1:-1;8723:2360:37;;;;;:::i;:::-;;:::i;2441:144:23:-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;2441:144;;-1:-1:-1;;;;;2570:8:23;;;7899:51:50;;7887:2;7872:18;2441:144:23;7753:203:50;11944:433:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13753:96::-;;;;;;;;;;-1:-1:-1;13828:7:37;:14;13753:96;;1819:58:25;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;6666:563:37:-;;;;;;;;;;;;;:::i;11564:115::-;;;;;;;;;;-1:-1:-1;11564:115:37;;;;;:::i;:::-;;:::i;:::-;;;9183:14:50;;9176:22;9158:41;;9146:2;9131:18;11564:115:37;9018:187:50;12900:847:37;;;;;;;;;;-1:-1:-1;12900:847:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11211:109::-;;;;;;;;;;-1:-1:-1;11297:16:37;;11211:109;;3405:215:23;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;12383:412:37:-;;;;;;;;;;;;;:::i;11685:253::-;11744:16;;:::i;:::-;11777:27;11799:4;11777:21;:27::i;:::-;11772:90;;11827:24;;-1:-1:-1;;;11827:24:37;;;;;;;;;;;11772:90;11879:52;;;;;;;;-1:-1:-1;;;;;11879:52:37;;;;;-1:-1:-1;11908:21:37;;;11879:52;11908:21;;;;;;;11879:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;11879:52:37;;;;-1:-1:-1;;;11879:52:37;;11872:59;11685:253;-1:-1:-1;;11685:253:37:o;8541:176::-;2334:13:23;:11;:13::i;:::-;8624:9:37::1;8619:92;8639:17:::0;;::::1;8619:92;;;8677:23;8690:6;;8697:1;8690:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8677:12;:23::i;:::-;8658:3;;8619:92;;;;8541:176:::0;;:::o;8456:79::-;8498:30;8506:10;8518:9;:7;:9::i;:::-;8498:30;;;-1:-1:-1;;;;;11035:32:50;;;11017:51;;11104:32;;;;11099:2;11084:18;;11077:60;10990:18;8498:30:37;;;;;;;8456:79::o;4679:1019::-;2334:13:23;:11;:13::i;:::-;4763:7:37::1;:14:::0;:18;4759:76:::1;;4804:20;;-1:-1:-1::0;;;4804:20:37::1;;;;;;;;;;;4759:76;4850:32;4872:9;4850:21;:32::i;:::-;4845:95;;4905:24;;-1:-1:-1::0;;;4905:24:37::1;;;;;;;;;;;4845:95;-1:-1:-1::0;;;;;4975:14:37;;::::1;4950:22;4975:14:::0;;;:7:::1;:14;::::0;;;;5003:19;;4975:14;;5003:19:::1;:33:::0;4999:85:::1;;5059:14;;-1:-1:-1::0;;;5059:14:37::1;;;;;;;;;;;4999:85;5111:88;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;5111:88:37;;::::1;::::0;;5148:13;;::::1;::::0;::::1;5111:88;::::0;;::::1;::::0;;;-1:-1:-1;5111:88:37;;;;;;;;;;;;5094:14;;;:7:::1;:14:::0;;;;;;;:105;;;;;;::::1;-1:-1:-1::0;;;;;;5094:105:37;;::::1;;::::0;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;5214:11:::1;::::0;::::1;5210:252;;5255:11;:19:::0;;-1:-1:-1;;;;;5255:19:37;::::1;-1:-1:-1::0;;;;;;5255:19:37;;::::1;::::0;::::1;::::0;;;5288:11:::1;:19:::0;;;;::::1;::::0;;::::1;::::0;;5210:252:::1;;;5346:11;::::0;;-1:-1:-1;;;;;5346:11:37;;::::1;5338:20;::::0;;;:7:::1;:20;::::0;;;;;:25:::1;;:33:::0;;;;::::1;-1:-1:-1::0;;;;;;5338:33:37;;::::1;::::0;::::1;::::0;;;5407:11;;5385:14;;;;;;;:19:::1;;:33:::0;;;::::1;5407:11:::0;;;::::1;5385:33:::0;;;::::1;::::0;;;5432:19;;::::1;;::::0;;5210:252:::1;5471:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;5534:26:37;;::::1;5496:35;5534:26:::0;;;::::1;::::0;;;;;;5570:25:::1;::::0;::::1;:42:::0;;5534:26;;5599:13;::::1;;::::0;5570:25;;:42:::1;::::0;5599:13;;5570:42:::1;:::i;:::-;::::0;;;-1:-1:-1;;5622:30:37;;5651:1:::1;::::0;5622:13;;:25:::1;::::0;:30:::1;::::0;5651:1;;5622:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;5668:23:37::1;::::0;;-1:-1:-1;;;;;11035:32:50;;;11017:51;;11104:32;;11099:2;11084:18;;11077:60;5668:23:37::1;::::0;10990:18:50;5668:23:37::1;;;;;;;4749:949;;4679:1019:::0;;:::o;13855:531::-;13938:14;2334:13:23;:11;:13::i;:::-;14009:7:37::1;:14:::0;13980:5;;13999:24;::::1;13995:163;;-1:-1:-1::0;14047:1:37::1;13995:163;;;14086:7;:14:::0;14069::::1;14078:5:::0;14069:6;:14:::1;:::i;:::-;:31;14065:93;;;14124:7;:14:::0;:23:::1;::::0;14141:6;;14124:23:::1;:::i;:::-;14116:31;;14065:93;14168:21;14204:5;-1:-1:-1::0;;;;;14192:18:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;14192:18:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;14168:42:37;-1:-1:-1;14225:9:37::1;14220:136;14244:5;14240:1;:9;14220:136;;;14282:63;;;;;;;;14305:1;14296:6;:10;;;;:::i;:::-;:14;::::0;14309:1:::1;14296:14;:::i;:::-;14282:63:::0;;::::1;;14324:7;14332:10;14341:1:::0;14332:6;:10:::1;:::i;:::-;14324:19;;;;;;;;:::i;:::-;;;;;;;;14282:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;14282:63:37::1;::::0;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;::::0;14270:6:::1;14277:1;14270:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:75;14251:3:::1;;14220:136;;;-1:-1:-1::0;14373:6:37;-1:-1:-1;;2357:1:23::1;13855:531:37::0;;;;:::o;4161:214:25:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;:::-;4161:214:::0;;:::o;3708:134::-;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:25;:::o;6306:354:37:-;6384:33;6406:10;6384:21;:33::i;:::-;6379:96;;6440:24;;-1:-1:-1;;;6440:24:37;;;;;;;;;;;6379:96;6485:44;6516:12;;6485:30;:44::i;:::-;6556:10;6540:15;:27;;;;;;;;;;:40;;:55;6583:12;;6540:40;:55;:::i;:::-;;6611:42;6628:10;6640:12;;6611:42;;;;;;;;:::i;:::-;;;;;;;;6306:354;;:::o;5704:596::-;5797:10;5783:25;;;;:13;:25;;;;;;;;5779:91;;;5831:28;;-1:-1:-1;;;5831:28:37;;;;;;;;;;;5779:91;5880:44;5911:12;;5880:30;:44::i;:::-;5935:30;5980:94;;;;;;;;6008:1;5980:94;;;;6024:1;5980:94;;;;6039:5;5980:94;;;;;;6060:12;;5980:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5980:94:37;;;;-1:-1:-1;;6085:16:37;:18;;5935:139;;-1:-1:-1;6085:16:37;-1:-1:-1;6085:18:37;;;:::i;:::-;;;;-1:-1:-1;;6127:10:37;6113:25;;;;6141:4;6113:25;;;;;;;;:32;;-1:-1:-1;;6113:32:37;;;;;;;;6155:27;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;:39;;;;;;;;:::i;:::-;-1:-1:-1;;6204:11:37;:28;;;;;;;-1:-1:-1;6204:28:37;;;;;;;;-1:-1:-1;;;;;;6204:28:37;6221:10;6204:28;;;;;;6248:45;;;;-1:-1:-1;6248:45:37;;6221:10;6280:12;;;;6248:45;:::i;:::-;;;;;;;;5769:531;5704:596;;:::o;7235:1215::-;7287:27;7309:4;7287:21;:27::i;:::-;7282:90;;7337:24;;-1:-1:-1;;;7337:24:37;;;;;;;;;;;7282:90;-1:-1:-1;;;;;7420:21:37;;7382:35;7420:21;;;;;;;;;;7455:24;;;;;;7451:85;;;7502:23;;-1:-1:-1;;;7502:23:37;;;;;;;;;;;7451:85;7550:13;:26;;:33;;;;;:::i;:::-;;;7587:1;7550:38;7546:110;;7611:34;;-1:-1:-1;;;7611:34:37;;;;;;;;;;;7546:110;7695:10;7666:18;7687:19;;;:7;:19;;;;;7720:15;;-1:-1:-1;;;;;7720:23:37;;;:15;;:23;7716:80;;7766:19;;-1:-1:-1;;;7766:19:37;;;;;;;;;;;7716:80;7810:15;;-1:-1:-1;;;;;7810:15:37;:29;7806:69;;7855:9;:7;:9::i;:::-;;7806:69;7907:88;;;;;;;;-1:-1:-1;;;;;7907:88:37;;;;;7939:10;:18;;7907:88;;;;;;;-1:-1:-1;7907:88:37;;;;;;;;;;;;7885:19;;;:7;:19;;;;;;;:110;;;;;;;-1:-1:-1;;;;;;7885:110:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8010:11;;;8006:277;;8051:11;:24;;8065:10;-1:-1:-1;;;;;;8051:24:37;;;;;;;;8089:11;:24;;;;;;;;;;8006:277;;;8152:11;;;-1:-1:-1;;;;;8152:11:37;;;8144:20;;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;8144:38:37;;;8172:10;8144:38;;;;;;8223:11;;8196:19;;;;;;;:24;;:38;;;;8223:11;;;;8196:38;;;;;;;8248:24;;;;;;8006:277;8292:12;:14;;;:12;:14;;;:::i;:::-;;;;;;8346:10;-1:-1:-1;;;;;8346:18:37;;8317:13;:25;;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;8374:30:37;;8403:1;;8374:13;;:25;;:30;;8403:1;;8374:30;:::i;:::-;;;;-1:-1:-1;;8420:23:37;;;8426:10;11017:51:50;;-1:-1:-1;;;;;11104:32:50;;11099:2;11084:18;;11077:60;8420:23:37;;10990:18:50;8420:23:37;10843:300:50;3155:101:23;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;3689:984:37:-;2334:13:23;:11;:13::i;:::-;3804:7:37::1;:14:::0;:18;3800:76:::1;;3845:20;;-1:-1:-1::0;;;3845:20:37::1;;;;;;;;;;;3800:76;-1:-1:-1::0;;;;;3890:19:37;::::1;;::::0;;;:13:::1;:19;::::0;;;;;::::1;;3886:85;;;3932:28;;-1:-1:-1::0;;;3932:28:37::1;;;;;;;;;;;3886:85;3985:14;:39;4010:12;;4000:23;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;3985:39;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;3985:39:37;;::::1;;3981:102;;;4047:25;;-1:-1:-1::0;;;4047:25:37::1;;;;;;;;;;;3981:102;4145:24:::0;;4141:99:::1;;4185:44;4216:12;;4185:30;:44::i;:::-;4250:30;4295:99;;;;;;;;4323:1;4295:99;;;;4339:1;4295:99;;;;4354:10;4295:99;;;;;;4380:12;;4295:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4295:99:37;;;;-1:-1:-1;;4405:16:37::1;:18:::0;;4250:144;;-1:-1:-1;4405:16:37;-1:-1:-1;4405:18:37::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;4433:19:37;::::1;;::::0;;;4455:4:::1;4433:19;::::0;;;;;;;:26;;-1:-1:-1;;4433:26:37;;::::1;::::0;::::1;::::0;;;4469:21;;;;;;;:33;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;;;::::0;;;::::1;::::0;::::1;::::0;;;:21;:33:::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;4512:11:37::1;:22:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;4512:22:37;;;;;::::1;::::0;;-1:-1:-1;;;;;;4512:22:37::1;-1:-1:-1::0;;;;;4512:22:37;::::1;;::::0;;-1:-1:-1;4545:67:37;::::1;;;4575:24;:26:::0;;;:24:::1;:26;::::0;::::1;:::i;:::-;;;;;;4545:67;4627:39;4647:4;4653:12;;4627:39;;;;;;;;:::i;:::-;;;;;;;;3790:883;3689:984:::0;;;;:::o;3438:112::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;3489:26:37::1;3504:10;3489:14;:26::i;:::-;3542:1;3525:14;:18:::0;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;15919:50:50;;5142:14:24;;15907:2:50;15892:18;5142:14:24;15766:209:50;5066:101:24;4092:1081;;;;;3438:112:37:o;8723:2360::-;2334:13:23;:11;:13::i;:::-;8800:1:37::1;:6;;8805:1;8800:6:::0;8796:63:::1;;8829:19;;-1:-1:-1::0;;;8829:19:37::1;;;;;;;;;;;8796:63;8869:18;::::0;::::1;:14;:18:::0;8898:21:::1;8907:11;8898:8;:21::i;:::-;8929:25;:23;:25::i;:::-;8965:21;:34:::0;;-1:-1:-1;;;;;;8965:34:37::1;::::0;;9059:24:::1;::::0;9040:16:::1;::::0;8997:1:::1;::::0;9027:57:::1;::::0;::::1;::::0;::::1;::::0;8997:1;;9040:43:::1;::::0;9059:24;9040:43:::1;:::i;:::-;9027:6;:57::i;:::-;9009:76;;9100:3;:8;;9107:1;9100:8:::0;9096:66:::1;;9131:20;;-1:-1:-1::0;;;9131:20:37::1;;;;;;;;;;;9096:66;9177:9;9172:936;9196:11;:18:::0;9192:22;::::1;9172:936;;;9235:12;9250:11;9262:1;9250:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;9250:14:37::1;9308:21:::0;;;;;;;;;;;9348:15:::1;::::0;::::1;::::0;9250:14;;-1:-1:-1;9308:21:37;9348:15:::1;;::::0;:48:::1;;;9367:4;:17;;:24;;;;;:::i;:::-;:29:::0;;-1:-1:-1;9348:48:37::1;9344:95;;;9416:8;;;;9344:95;9457:21;::::0;-1:-1:-1;;;;;9457:21:37::1;9453:172;;-1:-1:-1::0;9512:21:37::1;:28:::0;;-1:-1:-1;;;;;;9512:28:37::1;-1:-1:-1::0;;;;;9512:28:37;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;9558:22:37::1;:26:::0;9602:8:::1;;9453:172;9668:3;9643:28;;:22;;:28;9639:120;;;9691:27;9708:4;9714:3;9691:16;:27::i;:::-;9736:8;;;;9639:120;9822:21;::::0;-1:-1:-1;;;;;9822:21:37;;::::1;9773:30;9806:38:::0;;;::::1;::::0;;;;;;;;9912:35;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;9822:21;9912:35;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;9806:38;;9880:143:::1;::::0;9912:35;;;::::1;::::0;;;9941:4;;9912:35;;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;9912:35:37;;;;-1:-1:-1;;;9912:35:37;;9949:56:::1;::::0;;;;::::1;::::0;;9966:21:::1;::::0;-1:-1:-1;;;;;9966:21:37::1;9949:56:::0;;;;::::1;::::0;::::1;::::0;;;;;;9966:21;9949:56;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;9995:8;;9949:56;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;::::0;9880:10:::1;:143::i;:::-;9859:239;;;10056:27;10073:4;10079:3;10056:16;:27::i;:::-;9221:887;;;9172:936;9216:3;;9172:936;;;;10122:22;;10148:1;10122:27:::0;10118:85:::1;;10172:20;;-1:-1:-1::0;;;10172:20:37::1;;;;;;;;;;;10118:85;10309:21;::::0;10387:22:::1;::::0;-1:-1:-1;;;;;10309:21:37;;::::1;::::0;10294:12:::1;::::0;-1:-1:-1;;;;;10373:37:37;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;10373:37:37::1;-1:-1:-1::0;10340:70:37;-1:-1:-1;10426:9:37::1;10421:148;10445:22;;10441:1;:26;10421:148;;;10507:4;10488:13;10502:1;10488:16;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10488:23:37;;::::1;:16;::::0;;::::1;::::0;;;;;;:23;;;;10532:26;;::::1;;::::0;;;:20:::1;:26:::0;;;;;;;;;;::::1;::::0;;10469:3:::1;10421:148;;;;10578:26;10590:13;10578:11;:26::i;:::-;10690:7;:14:::0;;::::1;::::0;::::1;::::0;;10657:30:::1;10690:14:::0;;;;::::1;::::0;10714:24:::1;::::0;10721:17:::1;::::0;10714:24:::1;:::i;:::-;10782:14;;-1:-1:-1::0;;;;;10768:29:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;10768:29:37::1;-1:-1:-1::0;10748:49:37;;::::1;::::0;:17:::1;::::0;:49:::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;10813:9:37::1;10808:269;10832:14;;10828:1;:18;10808:269;;;10867:12;10882:13;10900:22;;10896:1;:26;;;;:::i;:::-;10882:41;;;;;;;;:::i;:::-;;;;;;;10867:56;;10960:4;10937:17;10955:1;10937:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;:27:::0;;-1:-1:-1;;;;;10937:27:37;;::::1;-1:-1:-1::0;;;;;;10937:27:37;;::::1;;::::0;;;10989:76:::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;11030:21;;;;;;;10937:27;11030:33;;::::1;::::0;10989:76;;::::1;::::0;;;10978:88;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;;;;::::1;::::0;10848:3:::1;10808:269;;;;8786:2297;;;;8723:2360:::0;:::o;11944:433::-;12072:17;:24;11998:18;;12028:25;;-1:-1:-1;;;;;12056:41:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;12028:69:37;-1:-1:-1;12112:9:37;12107:240;12131:17;:24;12127:28;;12107:240;;;12176:12;12191:17;12209:1;12191:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12191:20:37;12254:21;;;;;;;;;;;12301:35;;;;;;;;;;;;;;;;;;;;;12191:20;12301:35;;;;;;;;;;;;;;;;;;;;;;;;;;;12191:20;;-1:-1:-1;12254:21:37;;12301:35;;;;;;;12254:21;;12301:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12289:6;12296:1;12289:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;12157:3:37;;12107:240;;;-1:-1:-1;12364:6:37;11944:433;-1:-1:-1;11944:433:37:o;6666:563::-;6717:33;6739:10;6717:21;:33::i;:::-;6712:94;;6773:22;;-1:-1:-1;;;6773:22:37;;;;;;;;;;;6712:94;6866:10;6816:31;6850:27;;;;;;;;;;6891:20;;;;;;6887:84;;;6934:26;;-1:-1:-1;;;6934:26:37;;;;;;;;;;;6887:84;7032:14;;7004:24;;6985:16;;:43;;;;:::i;:::-;:61;6981:120;;7069:21;;-1:-1:-1;;;7069:21:37;;;;;;;;;;;6981:120;7111:20;;;:27;;-1:-1:-1;;7111:27:37;7134:4;7111:27;;;;;;7148:24;:29;;7111:20;;7148:29;;7134:4;;7148:29;:::i;:::-;;;;-1:-1:-1;;7193:29:37;;7211:10;7899:51:50;;7193:29:37;;7887:2:50;7872:18;7193:29:37;;;;;;;6702:527;6666:563::o;11564:115::-;-1:-1:-1;;;;;11653:19:37;11630:4;11653:19;;;:13;:19;;;;;;;;;11564:115::o;12900:847::-;12980:19;2334:13:23;:11;:13::i;:::-;13011:26:37::1;13057:30;13064:5;13071:1;13074:12;;13057:6;:30::i;:::-;-1:-1:-1::0;;;;;13040:48:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;13040:48:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;13114:11:37::1;::::0;13011:77;;-1:-1:-1;;;;;;13114:11:37;;::::1;::::0;13140:18;::::1;::::0;13136:74:::1;;-1:-1:-1::0;;;;;;13181:13:37;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:18:::1;;::::0;::::1;13136:74;13220:9;13243:211;-1:-1:-1::0;;;;;13250:18:37;::::1;::::0;;::::1;::::0;:31:::1;;;13276:5;13272:1;:9;13250:31;13243:211;;;-1:-1:-1::0;;;;;13318:13:37;;::::1;13297:18;13318:13:::0;;;:7:::1;:13;::::0;;;;;;;;13359:53;;;;::::1;::::0;;;;;;13395:15;;;;::::1;13359:53:::0;;::::1;::::0;;;;13318:13;13345:6;13352:3;::::1;::::0;::::1;:::i;:::-;;;13345:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:67;13433:10:::1;;::::0;-1:-1:-1;;;;;13433:10:37::1;::::0;-1:-1:-1;13243:211:37::1;;;13485:1;13468:6;:13;:18:::0;13464:62:::1;;13509:6;13502:13;;;;;;;13464:62;13584:25;13629:1;-1:-1:-1::0;;;;;13612:19:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;13612:19:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;13584:47:37;-1:-1:-1;13646:9:37::1;13641:77;13665:1;13661;:5;13641:77;;;13698:6;13705:1;13698:9;;;;;;;;:::i;:::-;;;;;;;13687:5;13693:1;13687:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:20;13668:3:::1;;13641:77;;;-1:-1:-1::0;13735:5:37;12900:847;-1:-1:-1;;;;;;12900:847:37:o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;7899:51:50::0;7872:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;12383:412:37:-;12508:11;:18;12434;;12464:25;;-1:-1:-1;;;;;12492:35:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;12464:63:37;-1:-1:-1;12542:9:37;12537:228;12561:11;:18;12557:22;;12537:228;;;12600:12;12615:11;12627:1;12615:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12615:14:37;12672:21;;;;;;;;;;;12719:35;;;;;;;;;;;;;;;;;;;;;12615:14;12719:35;;;;;;;;;;;;;;;;;;;;;;;;;;;12615:14;;-1:-1:-1;12672:21:37;;12719:35;;;;;;;12672:21;;12719:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12707:6;12714:1;12707:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;12581:3:37;;12537:228;;2658:162:23;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;7899:51:50;7872:18;;2763:40:23;7753:203:50;18617:506:37;-1:-1:-1;;;;;18693:13:37;;;18672:18;18693:13;;;:7;:13;;;;;18720:15;;18693:13;;18720:15;18716:66;;18765:7;18617:506;:::o;18716:66::-;18815:13;;;;-1:-1:-1;;;;;18858:12:37;;;18843:27;;18839:239;;;18934:27;18949:12;-1:-1:-1;;;;;18934:12:37;;;:27;:::i;:::-;18902:15;;-1:-1:-1;;;;;18902:15:37;18886;:32;;;;;;;;;;18902:15;18886:44;:75;;:44;;:15;:75;;;;;:::i;:::-;;;;-1:-1:-1;18839:239:37;;-1:-1:-1;18839:239:37;;19040:27;-1:-1:-1;;;;;19055:12:37;;;19040;:27;:::i;:::-;19008:15;;-1:-1:-1;;;;;19008:15:37;18992;:32;;;;;;;;;;19008:15;18992:44;:75;;:44;;:15;:75;;;;;:::i;:::-;;;;-1:-1:-1;;18839:239:37;-1:-1:-1;;;;;;19104:12:37;;;;19088:13;;;;:28;18617:506::o;17564:1047::-;17649:10;17601:7;17641:19;;;:7;:19;;;;;17674:15;;-1:-1:-1;;;;;17674:15:37;17670:80;;17726:13;;-1:-1:-1;;;17726:13:37;;;;;;;;;;;17670:80;17779:11;;17764;;-1:-1:-1;;;;;17779:11:37;;;17764;;:26;17760:528;;17806:11;:24;;-1:-1:-1;;;;;;17806:24:37;;;;;;17844:11;:24;;;;;;;17760:528;;;17889:11;;17904:10;-1:-1:-1;;;;;17889:11:37;;;:25;17885:403;;17938:10;;;;;-1:-1:-1;;;;;17938:10:37;;;17965:1;17930:19;;;:7;:19;;;;;:24;;:37;;-1:-1:-1;;;;;;17930:37:37;;;;;;17995:10;;17981:11;:24;;;;;17995:10;;17981:24;;;17885:403;;;18026:11;;18041:10;-1:-1:-1;;;;;18026:11:37;;;:25;18022:266;;18075:11;;-1:-1:-1;;;;;18075:11:37;;;18103:1;18067:20;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;18067:38:37;;;;;;18141:11;;;;;;18133:20;;;;;;:25;;;18119:39;;18133:25;;18119:39;;;;;;18022:266;;;18216:10;;;;;;18197;;;;;;-1:-1:-1;;;;;18197:10:37;;;18216;18189:19;;;:7;:19;;;;;;:24;;;:37;;18216:10;;;-1:-1:-1;;;;;;18189:37:37;;;;;;18267:10;;18248;;;;18240:19;;;;;:24;:37;;18267:10;;;;18240:37;;;;;18022:266;18322:15;;-1:-1:-1;;;;;18322:15:37;18298:21;18386:32;;;;;;;;;;18322:15;18458:13;;;;18429:25;;;:42;;18386:32;;18458:13;;18429:25;;18298:21;18429:42;;18458:13;;18429:42;:::i;:::-;;;;-1:-1:-1;;18481:30:37;;18510:1;;18481:13;;:25;;:30;;18510:1;;18481:30;:::i;:::-;;;;-1:-1:-1;;18537:10:37;18529:19;;;;:7;:19;;;;;18522:26;;-1:-1:-1;;;;;;18522:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18559:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;18591:13:37;;17564:1047;-1:-1:-1;;;;17564:1047:37:o;4603:312:25:-;4683:4;-1:-1:-1;;;;;4692:6:25;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:25;:32;-1:-1:-1;;;;;;;;;;;1519:53:30;-1:-1:-1;;;;;1519:53:30;;1441:138;4753:32:25;-1:-1:-1;;;;;4753:42:25;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:25;;;;;;;;;;;3573:84:37;2334:13:23;:11;:13::i;6057:538:25:-;6174:17;-1:-1:-1;;;;;6156:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:25;;;;;;;;-1:-1:-1;;6156:52:25;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:25;;-1:-1:-1;;;;;7917:32:50;;6518:60:25;;;7899:51:50;7872:18;;6518:60:25;7753:203:50;6152:437:25;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:25;;;;;160:25:50;;;133:18;;6317:34:25;14:177:50;6246:120:25;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:25;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:25;;;;;;;;;;;19129:348:37;19217:24;19254:12;;19244:23;;;;;;;:::i;:::-;;;;;;;;;;;19281:32;;;;:14;:32;;;;;;;19244:23;;-1:-1:-1;19281:32:37;;19277:95;;;19336:25;;-1:-1:-1;;;19336:25:37;;;;;;;;;;;19277:95;19382:38;19407:12;;19382:24;:38::i;:::-;19431:32;;;;:14;:32;;;;;:39;;-1:-1:-1;;19431:39:37;19466:4;19431:39;;;-1:-1:-1;;19129:348:37:o;3774:248:23:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;14418:502:37:-:0;14492:12;;14480:9;14518:6;;;14514:43;;14540:7;14418:502;:::o;14514:43::-;14572:9;14584:5;14588:1;14584;:5;:::i;:::-;14572:17;;14567:347;14591:5;;14567:347;;14679:9;14751:5;:1;14755;14751:5;:::i;:::-;14709:36;;;14726:15;14709:36;;;16681:19:50;16716:12;;;16709:28;;;16753:12;;14709:36:37;;;;;;;;;;;;14699:47;;;;;;14691:56;;:66;;;;:::i;:::-;14679:78;;14818:12;14833:5;14839:1;14833:8;;;;;;;;:::i;:::-;;;;;;;;;;;14866;;-1:-1:-1;;;;;14833:8:37;;;;-1:-1:-1;14866:5:37;;14872:1;;14866:8;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14866:8:37;14855:5;14861:1;14855:8;;;;;;;;:::i;:::-;;;;;;;;;:19;;;;;-1:-1:-1;;;;;14855:19:37;;;;;-1:-1:-1;;;;;14855:19:37;;;;;;14899:4;14888:5;14894:1;14888:8;;;;;;;;:::i;:::-;;;;;;;;;:15;;;;;-1:-1:-1;;;;;14888:15:37;;;;;-1:-1:-1;;;;;14888:15:37;;;;;;14603:311;;14598:3;;;;;:::i;:::-;;;;14567:347;;15441:317;15510:21;;-1:-1:-1;;;;;15510:21:37;15542:174;-1:-1:-1;;;;;15549:18:37;;;15542:174;;-1:-1:-1;;;;;15626:29:37;;;15583:15;15626:29;;;:20;:29;;;;;;;-1:-1:-1;;;;;;15669:36:37;;;;;15626:29;15542:174;;;-1:-1:-1;15750:1:37;15725:22;:26;15441:317::o;20020:337::-;20100:7;20129:3;20123;:9;20119:69;;;20155:22;;-1:-1:-1;;;20155:22:37;;;;;16950:25:50;;;16991:18;;;16984:34;;;16923:18;;20155:22:37;16776:248:50;20119:69:37;20210:3;20202:5;:11;20198:153;;;-1:-1:-1;20236:3:37;20229:10;;20198:153;20268:3;20260:5;:11;20256:95;;;-1:-1:-1;20294:3:37;20287:10;;20256:95;-1:-1:-1;20335:5:37;20256:95;20020:337;;;;;:::o;15764:1391::-;-1:-1:-1;;;;;15862:21:37;;15834:25;15862:21;;;;;;;;;;;15834:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;15834:49:37;;;;-1:-1:-1;;15939:86:37;;;;;;;;15956:21;;-1:-1:-1;;;;;15956:21:37;15939:86;;;-1:-1:-1;15985:38:37;;;15939:86;15985:38;;;;;;;15939:86;;;;;;;;;;;15956:21;15939:86;;;;;;;;;;;;;;;;;;;;;;;;;;;15834:49;;-1:-1:-1;15911:181:37;;15939:86;;-1:-1:-1;15939:86:37;;;;;15985:38;;15939:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16043:35;;;;;;;;16060:4;-1:-1:-1;;;;;16043:35:37;;;;;16072:4;16043:35;;;15911:10;:181::i;:::-;15894:984;;;16117:17;16129:4;16117:11;:17::i;:::-;15894:984;;;16204:21;;-1:-1:-1;;;;;16204:21:37;;;16165:15;16183:43;;;:20;:43;;;;;;;;;;16295:573;-1:-1:-1;;;;;16330:21:37;;16326:123;;16375:28;16388:8;16398:4;16375:12;:28::i;:::-;16425:5;;16326:123;16528:58;;;;;;;;-1:-1:-1;;;;;16528:58:37;;;;;-1:-1:-1;16560:24:37;;;16528:58;16560:24;;;;;;;16528:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16492:153;;16528:58;;;;;16560:24;16528:58;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16588:35;;;;;;;;16605:4;-1:-1:-1;;;;;16588:35:37;;;;;16617:4;16588:35;;;16492:10;:153::i;:::-;16467:293;;;16686:28;16699:8;16709:4;16686:12;:28::i;16467:293::-;-1:-1:-1;;;;;;16824:29:37;;;;;;;:20;:29;;;;;;;;16295:573;;;16151:727;;15894:984;16917:3;16892:28;;:22;;:28;16888:261;;;16972:21;;;-1:-1:-1;;;;;16972:21:37;;;16936:12;16951:43;;;:20;:43;;;;;;;-1:-1:-1;;;;;;17008:50:37;;;;;;17072:28;;16951:43;;17072:28;;;;;;;17114:22;:24;;16951:43;;17114:24;;;:::i;:::-;;;;;;16922:227;15824:1331;15764:1391;;:::o;19687:327::-;19788:4;19839:10;:15;;;:27;;;19808:10;:15;;;:27;;;:58;19804:129;;-1:-1:-1;19907:15:37;;19889;;-1:-1:-1;;;;;19889:33:37;;;;;;19882:40;;19804:129;-1:-1:-1;19980:15:37;;;;;:27;;;19950:15;;;;:27;;:57;;19687:327::o;14926:509::-;15007:12;;14995:9;15033:6;;;15029:43;;15055:7;14926:509;:::o;15029:43::-;15087:9;15099:5;15103:1;15099;:5;:::i;:::-;15087:17;;15082:347;15106:5;;15082:347;;15194:9;15266:5;:1;15270;15266:5;:::i;:::-;15224:36;;;15241:15;15224:36;;;16681:19:50;16716:12;;;16709:28;;;16753:12;;15224:36:37;;;;;;;;;;;;15214:47;;;;;;15206:56;;:66;;;;:::i;:::-;15194:78;;15333:12;15348:5;15354:1;15348:8;;;;;;;;:::i;:::-;;;;;;;15333:23;;15381:5;15387:1;15381:8;;;;;;;;:::i;:::-;;;;;;;15370:5;15376:1;15370:8;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1;;;;;15370:19:37;;;-1:-1:-1;;;;;15370:19:37;;;;;15414:4;15403:5;15409:1;15403:8;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;15403:15:37;;;-1:-1:-1;;;;;15403:15:37;;;;;15118:311;;15113:3;;;;;:::i;:::-;;;;15082:347;;2264:344:30;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:30;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;19514:167:37:-;19622:2;19602:22;;19598:77;;19647:17;;-1:-1:-1;;;19647:17:37;;;;;;;;;;;7084:141:24;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;17161:183:37:-;17244:21;;;-1:-1:-1;;;;;17215:26:37;;;17244:21;17215:26;;;:20;:26;;;;;:50;;17244:21;;;;-1:-1:-1;;;;;;17215:50:37;;;;;;;17275:28;;;;;;;;;17313:22;:24;;;;;;:::i;:::-;;;;;;17161:183;:::o;17350:208::-;-1:-1:-1;;;;;17448:26:37;;;;;;;:20;:26;;;;;;;;17419;;;;;;;;;:55;;17448:26;;;;-1:-1:-1;;;;;;17419:55:37;;;;;;;17484:26;;;:33;;;;;;;;;;17527:22;:24;;;;;;:::i;:::-;;;;;;17350:208;;:::o;1671:281:30:-;1748:17;-1:-1:-1;;;;;1748:29:30;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:30;;-1:-1:-1;;;;;7917:32:50;;1805:47:30;;;7899:51:50;7872:18;;1805:47:30;7753:203:50;1744:119:30;-1:-1:-1;;;;;;;;;;;1872:73:30;;-1:-1:-1;;;;;;1872:73:30;-1:-1:-1;;;;;1872:73:30;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:30:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:30;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;7917:32:50;;4917:24:34;;;7899:51:50;7872:18;;4917:24:34;7753:203:50;4837:119:34;-1:-1:-1;4976:10:34;4969:17;;5543:487;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:173:50;264:20;;-1:-1:-1;;;;;313:31:50;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:186::-;433:6;486:2;474:9;465:7;461:23;457:32;454:52;;;502:1;499;492:12;454:52;525:29;544:9;525:29;:::i;565:250::-;650:1;660:113;674:6;671:1;668:13;660:113;;;750:11;;;744:18;731:11;;;724:39;696:2;689:10;660:113;;;-1:-1:-1;;807:1:50;789:16;;782:27;565:250::o;820:270::-;861:3;899:5;893:12;926:6;921:3;914:19;942:76;1011:6;1004:4;999:3;995:14;988:4;981:5;977:16;942:76;:::i;:::-;1072:2;1051:15;-1:-1:-1;;1047:29:50;1038:39;;;;1079:4;1034:50;;820:270;-1:-1:-1;;820:270:50:o;1095:566::-;1212:1;1208;1203:3;1199:11;1195:19;1187:5;1181:12;1177:38;1172:3;1165:51;1147:3;1262:4;1255:5;1251:16;1245:23;1300:4;1293;1288:3;1284:14;1277:28;1343:12;1337:19;1330:4;1325:3;1321:14;1314:43;1411:4;1397:12;1393:23;1387:30;1382:2;1377:3;1373:12;1366:52;1488:4;1474:12;1470:23;1464:30;1457:38;1450:46;1443:4;1438:3;1434:14;1427:70;1552:2;1538:12;1534:21;1528:28;1506:50;;1587:4;1581:3;1576;1572:13;1565:27;1608:47;1650:3;1645;1641:13;1625:14;1608:47;:::i;:::-;1601:54;1095:566;-1:-1:-1;;;;1095:566:50:o;1666:266::-;1851:2;1840:9;1833:21;1814:4;1871:55;1922:2;1911:9;1907:18;1899:6;1871:55;:::i;1937:610::-;2023:6;2031;2084:2;2072:9;2063:7;2059:23;2055:32;2052:52;;;2100:1;2097;2090:12;2052:52;2140:9;2127:23;-1:-1:-1;;;;;2165:6:50;2162:30;2159:50;;;2205:1;2202;2195:12;2159:50;2228:22;;2281:4;2273:13;;2269:27;-1:-1:-1;2259:55:50;;2310:1;2307;2300:12;2259:55;2350:2;2337:16;-1:-1:-1;;;;;2368:6:50;2365:30;2362:50;;;2408:1;2405;2398:12;2362:50;2461:7;2456:2;2446:6;2443:1;2439:14;2435:2;2431:23;2427:32;2424:45;2421:65;;;2482:1;2479;2472:12;2421:65;2513:2;2505:11;;;;;2535:6;;-1:-1:-1;1937:610:50;-1:-1:-1;;;1937:610:50:o;2552:260::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:52;;;2697:1;2694;2687:12;2649:52;2720:29;2739:9;2720:29;:::i;:::-;2710:39;;2768:38;2802:2;2791:9;2787:18;2768:38;:::i;:::-;2758:48;;2552:260;;;;;:::o;2817:346::-;2885:6;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:52;;;2962:1;2959;2952:12;2914:52;-1:-1:-1;;3007:23:50;;;3127:2;3112:18;;;3099:32;;-1:-1:-1;2817:346:50:o;3168:1554::-;3358:4;3406:2;3395:9;3391:18;3436:2;3425:9;3418:21;3459:6;3494;3488:13;3525:6;3517;3510:22;3563:2;3552:9;3548:18;3541:25;;3625:2;3615:6;3612:1;3608:14;3597:9;3593:30;3589:39;3575:53;;3663:2;3655:6;3651:15;3684:1;3694:999;3708:6;3705:1;3702:13;3694:999;;;3773:22;;;-1:-1:-1;;3769:36:50;3757:49;;3829:13;;3912:9;;3897:25;;3969:2;3961:11;;;3955:18;3881:2;3993:15;;;3986:27;;;4074:19;;3869:15;;;4106:24;;;4196:21;;;-1:-1:-1;;4164:2:50;4152:15;;;4255:330;4271:8;4266:3;4263:17;4255:330;;;4344:15;;4394:9;;-1:-1:-1;;;;;4390:35:50;4376:50;;4480:2;4472:11;;;4466:18;4450:14;;;4443:42;4554:17;;;;4422:1;4290:11;;;;;4522:2;4511:14;;;;4255:330;;;-1:-1:-1;4608:5:50;-1:-1:-1;;;4648:2:50;4671:12;;;;4636:15;;;;;3730:1;3723:9;3694:999;;;-1:-1:-1;4710:6:50;;3168:1554;-1:-1:-1;;;;;;3168:1554:50:o;4727:127::-;4788:10;4783:3;4779:20;4776:1;4769:31;4819:4;4816:1;4809:15;4843:4;4840:1;4833:15;4859:1018;4936:6;4944;4997:2;4985:9;4976:7;4972:23;4968:32;4965:52;;;5013:1;5010;5003:12;4965:52;5036:29;5055:9;5036:29;:::i;:::-;5026:39;;5116:2;5105:9;5101:18;5088:32;-1:-1:-1;;;;;5135:6:50;5132:30;5129:50;;;5175:1;5172;5165:12;5129:50;5198:22;;5251:4;5243:13;;5239:27;-1:-1:-1;5229:55:50;;5280:1;5277;5270:12;5229:55;5320:2;5307:16;-1:-1:-1;;;;;5338:6:50;5335:30;5332:56;;;5368:18;;:::i;:::-;5417:2;5411:9;5509:2;5471:17;;-1:-1:-1;;5467:31:50;;;5500:2;5463:40;5459:54;5447:67;;-1:-1:-1;;;;;5529:34:50;;5565:22;;;5526:62;5523:88;;;5591:18;;:::i;:::-;5627:2;5620:22;5651;;;5692:15;;;5709:2;5688:24;5685:37;-1:-1:-1;5682:57:50;;;5735:1;5732;5725:12;5682:57;5791:6;5786:2;5782;5778:11;5773:2;5765:6;5761:15;5748:50;5844:1;5839:2;5830:6;5822;5818:19;5814:28;5807:39;5865:6;5855:16;;;;;4859:1018;;;;;:::o;6064:347::-;6115:8;6125:6;6179:3;6172:4;6164:6;6160:17;6156:27;6146:55;;6197:1;6194;6187:12;6146:55;-1:-1:-1;6220:20:50;;-1:-1:-1;;;;;6252:30:50;;6249:50;;;6295:1;6292;6285:12;6249:50;6332:4;6324:6;6320:17;6308:29;;6384:3;6377:4;6368:6;6360;6356:19;6352:30;6349:39;6346:59;;;6401:1;6398;6391:12;6346:59;6064:347;;;;;:::o;6416:409::-;6486:6;6494;6547:2;6535:9;6526:7;6522:23;6518:32;6515:52;;;6563:1;6560;6553:12;6515:52;6603:9;6590:23;-1:-1:-1;;;;;6628:6:50;6625:30;6622:50;;;6668:1;6665;6658:12;6622:50;6707:58;6757:7;6748:6;6737:9;6733:22;6707:58;:::i;:::-;6784:8;;6681:84;;-1:-1:-1;6416:409:50;-1:-1:-1;;;;6416:409:50:o;6830:644::-;6915:6;6923;6931;6939;6992:2;6980:9;6971:7;6967:23;6963:32;6960:52;;;7008:1;7005;6998:12;6960:52;7031:29;7050:9;7031:29;:::i;:::-;7021:39;;7111:2;7100:9;7096:18;7083:32;-1:-1:-1;;;;;7130:6:50;7127:30;7124:50;;;7170:1;7167;7160:12;7124:50;7209:58;7259:7;7250:6;7239:9;7235:22;7209:58;:::i;:::-;7286:8;;-1:-1:-1;7183:84:50;-1:-1:-1;;7371:2:50;7356:18;;7343:32;7411:13;;7404:21;7394:32;;7384:60;;7440:1;7437;7430:12;7384:60;6830:644;;;;-1:-1:-1;6830:644:50;;-1:-1:-1;;6830:644:50:o;7479:269::-;7536:6;7589:2;7577:9;7568:7;7564:23;7560:32;7557:52;;;7605:1;7602;7595:12;7557:52;7644:9;7631:23;7694:4;7687:5;7683:16;7676:5;7673:27;7663:55;;7714:1;7711;7704:12;7961:828;8159:4;8207:2;8196:9;8192:18;8237:2;8226:9;8219:21;8260:6;8295;8289:13;8326:6;8318;8311:22;8364:2;8353:9;8349:18;8342:25;;8426:2;8416:6;8413:1;8409:14;8398:9;8394:30;8390:39;8376:53;;8464:2;8456:6;8452:15;8485:1;8495:265;8509:6;8506:1;8503:13;8495:265;;;8602:2;8598:7;8586:9;8578:6;8574:22;8570:36;8565:3;8558:49;8630:50;8673:6;8664;8658:13;8630:50;:::i;:::-;8620:60;-1:-1:-1;8715:2:50;8738:12;;;;8703:15;;;;;8531:1;8524:9;8495:265;;8794:219;8943:2;8932:9;8925:21;8906:4;8963:44;9003:2;8992:9;8988:18;8980:6;8963:44;:::i;9210:300::-;9278:6;9286;9339:2;9327:9;9318:7;9314:23;9310:32;9307:52;;;9355:1;9352;9345:12;9307:52;9378:29;9397:9;9378:29;:::i;:::-;9368:39;9476:2;9461:18;;;;9448:32;;-1:-1:-1;;;9210:300:50:o;9515:806::-;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:306;10003:6;10000:1;9997:13;9989:306;;;10062:13;;10104:9;;-1:-1:-1;;;;;10100:35:50;;;10088:48;;10188:2;10180:11;;;10174:18;10170:44;10156:12;;;10149:66;10270:15;;;;10244:2;10235:12;;;;10132:1;10018:9;9989:306;;;-1:-1:-1;10312:3:50;;9515:806;-1:-1:-1;;;;;9515:806:50:o;10326:380::-;10405:1;10401:12;;;;10448;;;10469:61;;10523:4;10515:6;10511:17;10501:27;;10469:61;10576:2;10568:6;10565:14;10545:18;10542:38;10539:161;;10622:10;10617:3;10613:20;10610:1;10603:31;10657:4;10654:1;10647:15;10685:4;10682:1;10675:15;10711:127;10772:10;10767:3;10763:20;10760:1;10753:31;10803:4;10800:1;10793:15;10827:4;10824:1;10817:15;11148:127;11209:10;11204:3;11200:20;11197:1;11190:31;11240:4;11237:1;11230:15;11264:4;11261:1;11254:15;11280:135;11319:3;11340:17;;;11337:43;;11360:18;;:::i;:::-;-1:-1:-1;11407:1:50;11396:13;;11280:135::o;11420:125::-;11485:9;;;11506:10;;;11503:36;;;11519:18;;:::i;11550:128::-;11617:9;;;11638:11;;;11635:37;;;11652:18;;:::i;11808:517::-;11909:2;11904:3;11901:11;11898:421;;;11945:5;11942:1;11935:16;11989:4;11986:1;11976:18;12059:2;12047:10;12043:19;12040:1;12036:27;12030:4;12026:38;12095:4;12083:10;12080:20;12077:47;;;-1:-1:-1;12118:4:50;12077:47;12173:2;12168:3;12164:12;12161:1;12157:20;12151:4;12147:31;12137:41;;12228:81;12246:2;12239:5;12236:13;12228:81;;;12305:1;12291:16;;12272:1;12261:13;12228:81;;12501:1194;-1:-1:-1;;;;;12618:3:50;12615:27;12612:53;;;12645:18;;:::i;:::-;12674:93;12763:3;12723:38;12755:4;12749:11;12723:38;:::i;:::-;12717:4;12674:93;:::i;:::-;12793:1;12818:2;12813:3;12810:11;12835:1;12830:607;;;;13481:1;13498:3;13495:93;;;-1:-1:-1;13554:19:50;;;13541:33;13495:93;-1:-1:-1;;12458:1:50;12454:11;;;12450:24;12446:29;12436:40;12482:1;12478:11;;;12433:57;13601:78;;12803:886;;12830:607;11755:1;11748:14;;;11792:4;11779:18;;-1:-1:-1;;12866:17:50;;;12980:229;12994:7;12991:1;12988:14;12980:229;;;13083:19;;;13070:33;13055:49;;13190:4;13175:20;;;;13143:1;13131:14;;;;13010:12;12980:229;;;12984:3;13237;13228:7;13225:16;13222:159;;;13361:1;13357:6;13351:3;13345;13342:1;13338:11;13334:21;13330:34;13326:39;13313:9;13308:3;13304:19;13291:33;13287:79;13279:6;13272:95;13222:159;;;13424:1;13418:3;13415:1;13411:11;13407:19;13401:4;13394:33;12803:886;;12501:1194;;;:::o;13700:485::-;-1:-1:-1;;;;;13885:32:50;;13867:51;;13954:2;13949;13934:18;;13927:30;;;13973:18;;13966:34;;;13993:6;14042;14037:2;14022:18;;14009:48;14106:1;14077:22;;;14101:2;14073:31;;;14066:42;;;;14169:2;14148:15;;;-1:-1:-1;;14144:29:50;14129:45;14125:54;;13700:485;-1:-1:-1;;13700:485:50:o;14190:1295::-;14314:3;14308:10;-1:-1:-1;;;;;14333:6:50;14330:30;14327:56;;;14363:18;;:::i;:::-;14392:96;14481:6;14441:38;14473:4;14467:11;14441:38;:::i;:::-;14435:4;14392:96;:::i;:::-;14537:4;14568:2;14557:14;;14585:1;14580:648;;;;15272:1;15289:6;15286:89;;;-1:-1:-1;15341:19:50;;;15335:26;15286:89;-1:-1:-1;;12458:1:50;12454:11;;;12450:24;12446:29;12436:40;12482:1;12478:11;;;12433:57;15388:81;;14550:929;;14580:648;11755:1;11748:14;;;11792:4;11779:18;;-1:-1:-1;;14616:20:50;;;14733:222;14747:7;14744:1;14741:14;14733:222;;;14829:19;;;14823:26;14808:42;;14936:4;14921:20;;;;14889:1;14877:14;;;;14763:12;14733:222;;;14737:3;14983:6;14974:7;14971:19;14968:201;;;15044:19;;;15038:26;-1:-1:-1;;15127:1:50;15123:14;;;15139:3;15119:24;15115:37;15111:42;15096:58;15081:74;;14968:201;-1:-1:-1;;;;15215:1:50;15199:14;;;15195:22;15182:36;;-1:-1:-1;14190:1295:50:o;15490:271::-;15673:6;15665;15660:3;15647:33;15629:3;15699:16;;15724:13;;;15699:16;15490:271;-1:-1:-1;15490:271:50:o;15980:209::-;16012:1;16038;16028:132;;16082:10;16077:3;16073:20;16070:1;16063:31;16117:4;16114:1;16107:15;16145:4;16142:1;16135:15;16028:132;-1:-1:-1;16174:9:50;;15980:209::o;16194:136::-;16233:3;16261:5;16251:39;;16270:18;;:::i;:::-;-1:-1:-1;;;16306:18:50;;16194:136::o;16335:184::-;16405:6;16458:2;16446:9;16437:7;16433:23;16429:32;16426:52;;;16474:1;16471;16464:12;16426:52;-1:-1:-1;16497:16:50;;16335:184;-1:-1:-1;16335:184:50:o;17029:287::-;17158:3;17196:6;17190:13;17212:66;17271:6;17266:3;17259:4;17251:6;17247:17;17212:66;:::i;:::-;17294:16;;;;;17029:287;-1:-1:-1;;17029:287:50:o", + "object": "0x6080604052600436106101af575f3560e01c8063715018a6116100e7578063ad3cb1cc11610087578063eb9019d411610062578063eb9019d4146104a2578063f1bd0b37146104ce578063f2fde38b146104e2578063f3513a3714610501575f5ffd5b8063ad3cb1cc14610422578063b85f5da21461045f578063d04a68c714610473575f5ffd5b8063857861db116100c2578063857861db146103885780638da5cb5b146103a75780639de70258146103ed578063a09686c41461040e575f5ffd5b8063715018a6146103415780637c8a92c3146103555780638129fc1c14610374575f5ffd5b806340f74f471161015257806354fd4d501161012d57806354fd4d50146102d15780635a8eed73146102e4578063602a9eee146103035780636dd7d8ea14610322575f5ffd5b806340f74f471461027e5780634f1ef286146102aa57806352d1902d146102bd575f5ffd5b80631b605b861161018d5780631b605b86146102165780632bdf6d431461022a5780633174b6891461024b5780633d09c2a81461025f575f5ffd5b80630777cbef146101b35780630d2bd909146101d65780631904bb2e146101ea575b5f5ffd5b3480156101be575f5ffd5b506005545b6040519081526020015b60405180910390f35b3480156101e1575f5ffd5b50600d546101c3565b3480156101f5575f5ffd5b50610209610204366004613014565b610515565b6040516101cd91906130d3565b348015610221575f5ffd5b506009546101c3565b348015610235575f5ffd5b506102496102443660046130e5565b610630565b005b348015610256575f5ffd5b5061024961067e565b34801561026a575f5ffd5b50610249610279366004613154565b6106cd565b348015610289575f5ffd5b5061029d610298366004613185565b610918565b6040516101cd91906131a5565b6102496102b8366004613272565b610aab565b3480156102c8575f5ffd5b506101c3610aca565b3480156102dc575f5ffd5b5060016101c3565b3480156102ef575f5ffd5b506102496102fe366004613377565b610ae5565b34801561030e575f5ffd5b5061024961031d366004613377565b610b71565b34801561032d575f5ffd5b5061024961033c366004613014565b610cff565b34801561034c575f5ffd5b50610249610f7d565b348015610360575f5ffd5b5061024961036f3660046133b5565b610f90565b34801561037f575f5ffd5b506102496111cf565b348015610393575f5ffd5b506102496103a236600461341a565b6112db565b3480156103b2575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b0390911681526020016101cd565b3480156103f8575f5ffd5b50610401611874565b6040516101cd919061343a565b348015610419575f5ffd5b50600f546101c3565b34801561042d575f5ffd5b50610452604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101cd9190613491565b34801561046a575f5ffd5b50610249611a14565b34801561047e575f5ffd5b5061049261048d366004613014565b611afd565b60405190151581526020016101cd565b3480156104ad575f5ffd5b506104c16104bc3660046134a3565b611b1a565b6040516101cd91906134cb565b3480156104d9575f5ffd5b506004546101c3565b3480156104ed575f5ffd5b506102496104fc366004613014565b611d1b565b34801561050c575f5ffd5b50610401611d5d565b61051d612f1e565b61052682611afd565b6105435760405163510b8aad60e11b815260040160405180910390fd5b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549394928501936060840191906105a790613525565b80601f01602080910402602001604051908101604052809291908181526020018280546105d390613525565b801561061e5780601f106105f55761010080835404028352916020019161061e565b820191905f5260205f20905b81548152906001019060200180831161060157829003601f168201915b50505091909252505050905292915050565b610638611ef7565b5f5b818110156106795761067183838381811061065757610657613557565b905060200201602081019061066c9190613014565b611f52565b60010161063a565b505050565b7f6572af8bf9a0a86efb88dcc30011626a15c9c4603503aa4466a3f87a1867deef336106a8612032565b604080516001600160a01b0393841681529290911660208301520160405180910390a1565b6106d5611ef7565b600f54156106f6576040516349625b3b60e01b815260040160405180910390fd5b6106ff81611afd565b61071c5760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b038083165f90815260066020526040902080549091161561075757604051637c9a1cf960e01b815260040160405180910390fd5b604080516080810182526001600160a01b038085168252858116803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b0319918216178555905160018501559351600284018054918416918616919091179055516003909201805492821692909316919091179091556007541661081457600780546001600160a01b0385166001600160a01b0319918216811790925560088054909116909117905561086c565b600880546001600160a01b039081165f9081526006602052604080822060030180548489166001600160a01b031991821681179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f61087b8361357f565b90915550506001600160a01b038083165f90815260208190526040812060018101805491938716319290916108b1908490613597565b9091555050805460019082905f906108ca908490613597565b9091555050604080516001600160a01b038087168252851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e2910160405180910390a150505050565b6060610922611ef7565b600f548290841061093457505f610958565b600f546109418486613597565b111561095857600f546109559085906135aa565b90505b5f816001600160401b038111156109715761097161325e565b6040519080825280602002602001820160405280156109b657816020015b604080518082019091525f81526060602082015281526020019060019003908161098f5790505b5090505f5b82811015610aa057604051806040016040528082886109da9190613597565b6109e5906001613597565b8152602001600f6109f6848a613597565b81548110610a0657610a06613557565b905f5260205f2001805480602002602001604051908101604052809291908181526020015f905b82821015610a74575f848152602090819020604080518082019091526002850290910180546001600160a01b03168252600190810154828401529083529092019101610a2d565b50505050815250828281518110610a8d57610a8d613557565b60209081029190910101526001016109bb565b509150505b92915050565b610ab361225d565b610abc82612301565b610ac68282612309565b5050565b5f610ad36123c5565b505f5160206138295f395f51905f5290565b610aee33611afd565b610b0b5760405163510b8aad60e11b815260040160405180910390fd5b610b15828261240e565b335f908152602081905260409020600301610b31828483613601565b507f4af0b5984c9f88659d661fb64dcb63a5b946809cf1c78a8c6e0f6ef93c917032338383604051610b65939291906136ba565b60405180910390a15050565b335f9081526001602052604090205460ff1615610ba15760405163132e7efb60e31b815260040160405180910390fd5b610bab828261240e565b5f60405180608001604052805f81526020015f81526020015f1515815260200184848080601f0160208091040260200160405190810160405280939291908181526020018383808284375f920182905250939094525050600480549394509150610c148361357f565b9091555050335f908152600160208181526040808420805460ff19908116851790915584835293819020855181559185015192820192909255908301516002820180549093169015151790915560608201518291906003820190610c7890826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b031916339081179091556040517f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c9250610cf29190869086906136ba565b60405180910390a1505050565b610d0881611afd565b610d255760405163510b8aad60e11b815260040160405180910390fd5b6001600160a01b0381165f908152602081905260409020600281015460ff1615610d625760405163510ae2bd60e11b815260040160405180910390fd5b806003018054610d7190613525565b90505f03610d925760405163970c784d60e01b815260040160405180910390fd5b335f90815260066020526040902080546001600160a01b03848116911603610dcd57604051630d41c52760e01b815260040160405180910390fd5b80546001600160a01b031615610de757610de5612032565b505b604080516080810182526001600160a01b03808616825233803160208085019182525f85870181815260608701828152948252600690925295909520935184549084166001600160a01b03199182161785559051600185015593516002840180549184169186169190911790555160039092018054928216929093169190911790915560075416610e995760078054336001600160a01b03199182168117909255600880549091169091179055610ef0565b600880546001600160a01b039081165f9081526006602052604080822060030180546001600160a01b0319908116339081179092558554828552929093206002018054841692909416919091179092558254161790555b60098054905f610eff8361357f565b9190505550336001600160a01b031631826001015f828254610f219190613597565b9091555050815460019083905f90610f3a908490613597565b9091555050604080513381526001600160a01b03851660208201527fce0c7a2a940807f7dc2ce7a615c2532e915e6c0ac9a08bc4ed9d515a710a53e29101610cf2565b610f85611ef7565b610f8e5f612482565b565b610f98611ef7565b600f5415610fb9576040516349625b3b60e01b815260040160405180910390fd5b6001600160a01b0384165f9081526001602052604090205460ff1615610ff25760405163132e7efb60e31b815260040160405180910390fd5b60025f84846040516110059291906137b3565b604080519182900390912082526020820192909252015f205460ff161561103f57604051637e4c066f60e01b815260040160405180910390fd5b811561104f5761104f838361240e565b5f60405180608001604052805f81526020015f8152602001831515815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f9201829052509390945250506004805493945091506110b88361357f565b90915550506001600160a01b0385165f908152600160208181526040808420805460ff1990811685179091558483529381902085518155918501519282019290925590830151600282018054909316901515179091556060820151829190600382019061112590826136f9565b5050600380546001810182555f919091527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b0180546001600160a01b0319166001600160a01b03881617905550811561118d5760058054905f6111878361357f565b91905055505b7f61809fa303a3a57f4d70552f533f3e0b003173d424590cd4bb22a2afe000990c8585856040516111c0939291906136ba565b60405180910390a15050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112135750825b90505f826001600160401b0316600114801561122e5750303b155b90508115801561123c575080155b1561125a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561128457845460ff60401b1916600160401b1785555b61128d336124f2565b6001600e5583156112d457845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020016111c0565b5050505050565b6112e3611ef7565b8060ff165f0361130657604051630e52390960e41b815260040160405180910390fd5b60ff8116600e556113176003612503565b61131f612653565b600c80546001600160a01b03191690556005546004545f916113519160ff851691849161134c91906135aa565b6126a4565b90508060ff165f03611376576040516367c0fced60e01b815260040160405180910390fd5b5f5b600354811015611638575f6003828154811061139657611396613557565b5f9182526020808320909101546001600160a01b031680835290829052604090912060028101549192509060ff16806113dd57508060030180546113d990613525565b1590505b156113e9575050611630565b600c546001600160a01b03166114245750600c80546001600160a01b0319166001600160a01b03929092169190911790556001600d55611630565b8360ff16600d5410156114425761143b82856126f8565b5050611630565b600c546001600160a01b039081165f9081526020818152604091829020825180840184529386168452825160808101845285548152600186015481840152600286015460ff16151593810193909352600385018054919461161d949093840192909187916060840191906114b590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546114e190613525565b801561152c5780601f106115035761010080835404028352916020019161152c565b820191905f5260205f20905b81548152906001019060200180831161150f57829003601f168201915b505050919092525050509052604080518082018252600c546001600160a01b031681528151608081018352855481526001860154602082810191909152600287015460ff1615159382019390935260038601805492938401928791606084019161159590613525565b80601f01602080910402602001604051908101604052809291908181526020018280546115c190613525565b801561160c5780601f106115e35761010080835404028352916020019161160c565b820191905f5260205f20905b8154815290600101906020018083116115ef57829003601f168201915b505050505081525050815250612ad4565b1561162c5761162c83866126f8565b5050505b600101611378565b50600d545f0361165b576040516367c0fced60e01b815260040160405180910390fd5b600c54600d546001600160a01b03909116905f906001600160401b038111156116865761168661325e565b6040519080825280602002602001820160405280156116af578160200160208202803683370190505b5090505f5b600d5481101561170957828282815181106116d1576116d1613557565b6001600160a01b039283166020918202929092018101919091529381165f908152600a909452604090932054909216916001016116b4565b5061171381612b18565b600f80546001810182555f9182527f8d1108e10bcb7c27dddfc02ed9d693a074039d026cf4ea4240b40f7d581ac802019061175090600b90612f67565b600e546001600160401b0381111561176a5761176a61325e565b604051908082528060200260200182016040528015611793578160200160208202803683370190505b5080516117a891600b91602090910190612f82565b505f5b600e5481101561186c575f83600d54836117c591906137c2565b815181106117d5576117d5613557565b6020026020010151905080600b83815481106117f3576117f3613557565b5f918252602080832090910180546001600160a01b039485166001600160a01b0319918216179091556040805180820182529585168087528452838352832060019081015486840190815288548083018a55898652939094209551600290930290950180549290941691161782555190820155016117ab565b505050505050565b600b546060905f906001600160401b038111156118935761189361325e565b6040519080825280602002602001820160405280156118cc57816020015b6118b9612f1e565b8152602001906001900390816118b15790505b5090505f5b600b54811015611a0e575f600b82815481106118ef576118ef613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff16151595810195909552600382018054939650919490938401929091859160608401919061196490613525565b80601f016020809104026020016040519081016040528092919081815260200182805461199090613525565b80156119db5780601f106119b2576101008083540402835291602001916119db565b820191905f5260205f20905b8154815290600101906020018083116119be57829003601f168201915b5050505050815250508152508484815181106119f9576119f9613557565b602090810291909101015250506001016118d1565b50919050565b611a1d33611afd565b611a3a5760405163668191af60e11b815260040160405180910390fd5b335f908152602081905260409020600281015460ff1615611a6e57604051632d8b5c9760e21b815260040160405180910390fd5b600e54600554600454611a8191906135aa565b11611a9f57604051633b15f1f760e21b815260040160405180910390fd5b60028101805460ff19166001908117909155600580545f90611ac2908490613597565b90915550506040513381527f24250fc1ec78a1405ddd4cc8b75964858af228d05faa8d4bc1302966d8a541179060200160405180910390a150565b6001600160a01b03165f9081526001602052604090205460ff1690565b6060611b24611ef7565b5f611b32835f6009546126a4565b6001600160401b03811115611b4957611b4961325e565b604051908082528060200260200182016040528015611b8d57816020015b604080518082019091525f8082526020820152815260200190600190039081611b675790505b506007549091506001600160a01b0390811690851615611bc657506001600160a01b038085165f90815260066020526040902060030154165b5f5b6001600160a01b03821615801590611bdf57508481105b15611c54576001600160a01b038083165f818152600660209081526040918290208251808401909352928252825490931692810192909252908483611c238161357f565b945081518110611c3557611c35613557565b6020908102919091010152600301546001600160a01b03169150611bc8565b80835103611c6757829350505050610aa5565b5f816001600160401b03811115611c8057611c8061325e565b604051908082528060200260200182016040528015611cc457816020015b604080518082019091525f8082526020820152815260200190600190039081611c9e5790505b5090505f5b82811015611d1057848181518110611ce357611ce3613557565b6020026020010151828281518110611cfd57611cfd613557565b6020908102919091010152600101611cc9565b509695505050505050565b611d23611ef7565b6001600160a01b038116611d5157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b611d5a81612482565b50565b6003546060905f906001600160401b03811115611d7c57611d7c61325e565b604051908082528060200260200182016040528015611db557816020015b611da2612f1e565b815260200190600190039081611d9a5790505b5090505f5b600354811015611a0e575f60038281548110611dd857611dd8613557565b5f9182526020808320909101546001600160a01b031680835282825260409283902083518085018552828152845160808101865282548152600183015481860152600283015460ff161515958101959095526003820180549396509194909384019290918591606084019190611e4d90613525565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7990613525565b8015611ec45780601f10611e9b57610100808354040283529160200191611ec4565b820191905f5260205f20905b815481529060010190602001808311611ea757829003601f168201915b505050505081525050815250848481518110611ee257611ee2613557565b60209081029190910101525050600101611dba565b33611f297f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b031614610f8e5760405163118cdaa760e01b8152336004820152602401611d48565b6001600160a01b038082165f9081526006602052604090208054909116611f77575050565b60018101546001600160a01b03831631811015611fd857611fa2816001600160a01b038516316135aa565b82546001600160a01b03165f9081526020819052604081206001018054909190611fcd908490613597565b9091555061201d9050565b611fec6001600160a01b03841631826135aa565b82546001600160a01b03165f90815260208190526040812060010180549091906120179084906135aa565b90915550505b506001600160a01b0390911631600190910155565b335f90815260066020526040812080546001600160a01b03166120685760405163498ea63d60e01b815260040160405180910390fd5b6008546007546001600160a01b039182169116036120a157600780546001600160a01b03199081169091556008805490911690556121b4565b600854336001600160a01b03909116036120fa576002810180546001600160a01b039081165f90815260066020526040902060030180546001600160a01b031990811690915591546008805490931691161790556121b4565b600754336001600160a01b039091160361215e576008546001600160a01b039081165f9081526006602052604080822060020180546001600160a01b03199081169091556007805480861685529290932060030154911692169190911790556121b4565b60038181018054600280850180546001600160a01b039081165f9081526006602052604080822090970180549583166001600160a01b031996871617905591549454811682529490200180549290931691161790555b80546001600160a01b03165f8181526020819052604081206001808501549082018054929391929091906121e99084906135aa565b9091555050805460019082905f906122029084906135aa565b9091555050335f90815260066020526040812080546001600160a01b0319908116825560018201839055600282018054821690556003909101805490911690556009805491612250836137e1565b9091555091949350505050565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614806122e357507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166122d75f5160206138295f395f51905f52546001600160a01b031690565b6001600160a01b031614155b15610f8e5760405163703e46dd60e11b815260040160405180910390fd5b611d5a611ef7565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015612363575060408051601f3d908101601f19168201909252612360918101906137f6565b60015b61238b57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401611d48565b5f5160206138295f395f51905f5281146123bb57604051632a87526960e21b815260048101829052602401611d48565b6106798383612c2f565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610f8e5760405163703e46dd60e11b815260040160405180910390fd5b5f828260405161241f9291906137b3565b60408051918290039091205f8181526002602052919091205490915060ff161561245c57604051637e4c066f60e01b815260040160405180910390fd5b6124668383612c84565b5f908152600260205260409020805460ff191660011790555050565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b6124fa612ca5565b611d5a81612cee565b80545f819003612511575050565b5f61251d6001836135aa565b90505b8015610679575f612532826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c61256791906137c2565b90505f84838154811061257c5761257c613557565b5f9182526020909120015485546001600160a01b0390911691508590839081106125a8576125a8613557565b905f5260205f20015f9054906101000a90046001600160a01b03168584815481106125d5576125d5613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055508085838154811061261357612613613557565b905f5260205f20015f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050808061264b906137e1565b915050612520565b600c546001600160a01b03165b6001600160a01b0381161561269d576001600160a01b039081165f908152600a6020526040902080546001600160a01b0319811690915516612660565b505f600d55565b5f818311156126d057604051632457cde760e01b81526004810184905260248101839052604401611d48565b828410156126df5750816126f1565b818411156126ee5750806126f1565b50825b9392505050565b6001600160a01b0382165f90815260208181526040808320815160808101835281548152600182015493810193909352600281015460ff1615159183019190915260038101805460608401919061274e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461277a90613525565b80156127c55780601f1061279c576101008083540402835291602001916127c5565b820191905f5260205f20905b8154815290600101906020018083116127a857829003601f168201915b505050919092525050604080518082018252600c546001600160a01b03168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff161515948101949094526003810180549697506128e49693955091850193929091606084019161283e90613525565b80601f016020809104026020016040519081016040528092919081815260200182805461286a90613525565b80156128b55780601f1061288c576101008083540402835291602001916128b5565b820191905f5260205f20905b81548152906001019060200180831161289857829003601f168201915b5050505050815250508152506040518060400160405280866001600160a01b0316815260200184815250612ad4565b156128f7576128f283612cf6565b612a75565b600c546001600160a01b039081165f818152600a6020526040902054909116905b6001600160a01b038216612935576129308186612d47565b612a72565b6040805180820182526001600160a01b0384168082525f908152602081815290839020835160808101855281548152600182015481840152600282015460ff16151594810194909452600381018054612a4295938501939291606084019161299c90613525565b80601f01602080910402602001604051908101604052809291908181526020018280546129c890613525565b8015612a135780601f106129ea57610100808354040283529160200191612a13565b820191905f5260205f20905b8154815290600101906020018083116129f657829003601f168201915b5050505050815250508152506040518060400160405280886001600160a01b0316815260200186815250612ad4565b15612a51576129308186612d47565b506001600160a01b038082165f908152600a60205260409020541690612918565b50505b8160ff16600d54111561067957600c80546001600160a01b039081165f908152600a6020526040812080546001600160a01b03198082169092558454931692168217909255600d80549192612ac9836137e1565b919050555050505050565b5f81602001516020015183602001516020015103612b045750805182516001600160a01b03918216911611610aa5565b506020908101518101519181015101511190565b80515f819003612b26575050565b5f612b326001836135aa565b90505b8015610679575f612b47826001613597565b60408051426020820152908101849052606001604051602081830303815290604052805190602001205f1c612b7c91906137c2565b90505f848381518110612b9157612b91613557565b60200260200101519050848281518110612bad57612bad613557565b6020026020010151858481518110612bc757612bc7613557565b60200260200101906001600160a01b031690816001600160a01b03168152505080858381518110612bfa57612bfa613557565b60200260200101906001600160a01b031690816001600160a01b03168152505050508080612c27906137e1565b915050612b35565b612c3882612da5565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612c7c576106798282612e08565b610ac6612e7a565b60308114610ac6576040516305db9dbd60e01b815260040160405180910390fd5b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610f8e57604051631afcd79f60e31b815260040160405180910390fd5b611d23612ca5565b600c80546001600160a01b038381165f818152600a602052604081208054939094166001600160a01b031993841617909355835490911617909155600d805491612d3f8361357f565b919050555050565b6001600160a01b038281165f818152600a602052604080822080548686168085529284208054919096166001600160a01b03199182161790955592825282549093169092179055600d805491612d9c8361357f565b91905055505050565b806001600160a01b03163b5f03612dda57604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611d48565b5f5160206138295f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b031684604051612e24919061380d565b5f60405180830381855af49150503d805f8114612e5c576040519150601f19603f3d011682016040523d82523d5f602084013e612e61565b606091505b5091509150612e71858383612e99565b95945050505050565b3415610f8e5760405163b398979f60e01b815260040160405180910390fd5b606082612eae57612ea982612ef5565b6126f1565b8151158015612ec557506001600160a01b0384163b155b15612eee57604051639996b31560e01b81526001600160a01b0385166004820152602401611d48565b50806126f1565b805115612f055780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b60405180604001604052805f6001600160a01b03168152602001612f6260405180608001604052805f81526020015f81526020015f15158152602001606081525090565b905290565b5080545f8255905f5260205f2090810190611d5a9190612fe5565b828054828255905f5260205f20908101928215612fd5579160200282015b82811115612fd557825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190612fa0565b50612fe1929150612fe5565b5090565b5b80821115612fe1575f8155600101612fe6565b80356001600160a01b038116811461300f575f5ffd5b919050565b5f60208284031215613024575f5ffd5b6126f182612ff9565b5f5b8381101561304757818101518382015260200161302f565b50505f910152565b5f815180845261306681602086016020860161302d565b601f01601f19169290920160200192915050565b60018060a01b0381511682525f602082015160406020850152805160408501526020810151606085015260408101511515608085015260608101519050608060a08501526130cb60c085018261304f565b949350505050565b602081525f6126f1602083018461307a565b5f5f602083850312156130f6575f5ffd5b82356001600160401b0381111561310b575f5ffd5b8301601f8101851361311b575f5ffd5b80356001600160401b03811115613130575f5ffd5b8560208260051b8401011115613144575f5ffd5b6020919091019590945092505050565b5f5f60408385031215613165575f5ffd5b61316e83612ff9565b915061317c60208401612ff9565b90509250929050565b5f5f60408385031215613196575f5ffd5b50508035926020909101359150565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257868503603f19018452815180518652602090810151604082880181905281519088018190529101905f9060608801905b8083101561323a57835180516001600160a01b03168352602090810151818401529093019260019290920191604090910190613203565b509650505060209384019391909101906001016131cb565b50929695505050505050565b634e487b7160e01b5f52604160045260245ffd5b5f5f60408385031215613283575f5ffd5b61328c83612ff9565b915060208301356001600160401b038111156132a6575f5ffd5b8301601f810185136132b6575f5ffd5b80356001600160401b038111156132cf576132cf61325e565b604051601f8201601f19908116603f011681016001600160401b03811182821017156132fd576132fd61325e565b604052818152828201602001871015613314575f5ffd5b816020840160208301375f602083830101528093505050509250929050565b5f5f83601f840112613343575f5ffd5b5081356001600160401b03811115613359575f5ffd5b602083019150836020828501011115613370575f5ffd5b9250929050565b5f5f60208385031215613388575f5ffd5b82356001600160401b0381111561339d575f5ffd5b6133a985828601613333565b90969095509350505050565b5f5f5f5f606085870312156133c8575f5ffd5b6133d185612ff9565b935060208501356001600160401b038111156133eb575f5ffd5b6133f787828801613333565b9094509250506040850135801515811461340f575f5ffd5b939692955090935050565b5f6020828403121561342a575f5ffd5b813560ff811681146126f1575f5ffd5b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561325257603f1987860301845261347c85835161307a565b94506020938401939190910190600101613460565b602081525f6126f1602083018461304f565b5f5f604083850312156134b4575f5ffd5b6134bd83612ff9565b946020939093013593505050565b602080825282518282018190525f918401906040840190835b8181101561351a57835180516001600160a01b0390811685526020918201511681850152909301926040909201916001016134e4565b509095945050505050565b600181811c9082168061353957607f821691505b602082108103611a0e57634e487b7160e01b5f52602260045260245ffd5b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f600182016135905761359061356b565b5060010190565b80820180821115610aa557610aa561356b565b81810381811115610aa557610aa561356b565b601f82111561067957805f5260205f20601f840160051c810160208510156135e25750805b601f840160051c820191505b818110156112d4575f81556001016135ee565b6001600160401b038311156136185761361861325e565b61362c836136268354613525565b836135bd565b5f601f84116001811461365d575f85156136465750838201355b5f19600387901b1c1916600186901b1783556112d4565b5f83815260208120601f198716915b8281101561368c578685013582556020948501946001909201910161366c565b50868210156136a8575f1960f88860031b161c19848701351681555b505060018560011b0183555050505050565b6001600160a01b03841681526040602082018190528101829052818360608301375f818301606090810191909152601f909201601f1916010192915050565b81516001600160401b038111156137125761371261325e565b613726816137208454613525565b846135bd565b6020601f821160018114613758575f83156137415750848201515b5f19600385901b1c1916600184901b1784556112d4565b5f84815260208120601f198516915b828110156137875787850151825560209485019460019092019101613767565b50848210156137a457868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b818382375f9101908152919050565b5f826137dc57634e487b7160e01b5f52601260045260245ffd5b500690565b5f816137ef576137ef61356b565b505f190190565b5f60208284031215613806575f5ffd5b5051919050565b5f825161381e81846020870161302d565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca2646970667358221220983e2d933e18f12cab95985824dc16db07106a30fc15cd31c83493c6e0e0f72b64736f6c634300081b0033", + "sourceMap": "1266:19289:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11522:115;;;;;;;;;;-1:-1:-1;11606:24:37;;11522:115;;;160:25:50;;;148:2;133:18;11522:115:37;;;;;;;;11643:111;;;;;;;;;;-1:-1:-1;11725:22:37;;11643:111;;11881:253;;;;;;;;;;-1:-1:-1;11881:253:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;12997:93::-;;;;;;;;;;-1:-1:-1;13071:12:37;;12997:93;;8737:176;;;;;;;;;;-1:-1:-1;8737:176:37;;;;;:::i;:::-;;:::i;:::-;;8652:79;;;;;;;;;;;;;:::i;4875:1019::-;;;;;;;;;;-1:-1:-1;4875:1019:37;;;;;:::i;:::-;;:::i;14051:531::-;;;;;;;;;;-1:-1:-1;14051:531:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4161:214:25:-;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;11325:76:37:-;;;;;;;;;;-1:-1:-1;11393:1:37;11325:76;;6502:354;;;;;;;;;;-1:-1:-1;6502:354:37;;;;;:::i;:::-;;:::i;5900:596::-;;;;;;;;;;-1:-1:-1;5900:596:37;;;;;:::i;:::-;;:::i;7431:1215::-;;;;;;;;;;-1:-1:-1;7431:1215:37;;;;;:::i;:::-;;:::i;3155:101:23:-;;;;;;;;;;;;;:::i;3885:984:37:-;;;;;;;;;;-1:-1:-1;3885:984:37;;;;;:::i;:::-;;:::i;3634:112::-;;;;;;;;;;;;;:::i;8919:2360::-;;;;;;;;;;-1:-1:-1;8919:2360:37;;;;;:::i;:::-;;:::i;2441:144:23:-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;2441:144;;-1:-1:-1;;;;;2570:8:23;;;7899:51:50;;7887:2;7872:18;2441:144:23;7753:203:50;12140:433:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;13949:96::-;;;;;;;;;;-1:-1:-1;14024:7:37;:14;13949:96;;1819:58:25;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;6862:563:37:-;;;;;;;;;;;;;:::i;11760:115::-;;;;;;;;;;-1:-1:-1;11760:115:37;;;;;:::i;:::-;;:::i;:::-;;;9183:14:50;;9176:22;9158:41;;9146:2;9131:18;11760:115:37;9018:187:50;13096:847:37;;;;;;;;;;-1:-1:-1;13096:847:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11407:109::-;;;;;;;;;;-1:-1:-1;11493:16:37;;11407:109;;3405:215:23;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;12579:412:37:-;;;;;;;;;;;;;:::i;11881:253::-;11940:16;;:::i;:::-;11973:27;11995:4;11973:21;:27::i;:::-;11968:90;;12023:24;;-1:-1:-1;;;12023:24:37;;;;;;;;;;;11968:90;12075:52;;;;;;;;-1:-1:-1;;;;;12075:52:37;;;;;-1:-1:-1;12104:21:37;;;12075:52;12104:21;;;;;;;12075:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;12075:52:37;;;;-1:-1:-1;;;12075:52:37;;12068:59;11881:253;-1:-1:-1;;11881:253:37:o;8737:176::-;2334:13:23;:11;:13::i;:::-;8820:9:37::1;8815:92;8835:17:::0;;::::1;8815:92;;;8873:23;8886:6;;8893:1;8886:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;8873:12;:23::i;:::-;8854:3;;8815:92;;;;8737:176:::0;;:::o;8652:79::-;8694:30;8702:10;8714:9;:7;:9::i;:::-;8694:30;;;-1:-1:-1;;;;;11035:32:50;;;11017:51;;11104:32;;;;11099:2;11084:18;;11077:60;10990:18;8694:30:37;;;;;;;8652:79::o;4875:1019::-;2334:13:23;:11;:13::i;:::-;4959:7:37::1;:14:::0;:18;4955:76:::1;;5000:20;;-1:-1:-1::0;;;5000:20:37::1;;;;;;;;;;;4955:76;5046:32;5068:9;5046:21;:32::i;:::-;5041:95;;5101:24;;-1:-1:-1::0;;;5101:24:37::1;;;;;;;;;;;5041:95;-1:-1:-1::0;;;;;5171:14:37;;::::1;5146:22;5171:14:::0;;;:7:::1;:14;::::0;;;;5199:19;;5171:14;;5199:19:::1;:33:::0;5195:85:::1;;5255:14;;-1:-1:-1::0;;;5255:14:37::1;;;;;;;;;;;5195:85;5307:88;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;5307:88:37;;::::1;::::0;;5344:13;;::::1;::::0;::::1;5307:88;::::0;;::::1;::::0;;;-1:-1:-1;5307:88:37;;;;;;;;;;;;5290:14;;;:7:::1;:14:::0;;;;;;;:105;;;;;;::::1;-1:-1:-1::0;;;;;;5290:105:37;;::::1;;::::0;;;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;;5410:11:::1;::::0;::::1;5406:252;;5451:11;:19:::0;;-1:-1:-1;;;;;5451:19:37;::::1;-1:-1:-1::0;;;;;;5451:19:37;;::::1;::::0;::::1;::::0;;;5484:11:::1;:19:::0;;;;::::1;::::0;;::::1;::::0;;5406:252:::1;;;5542:11;::::0;;-1:-1:-1;;;;;5542:11:37;;::::1;5534:20;::::0;;;:7:::1;:20;::::0;;;;;:25:::1;;:33:::0;;;;::::1;-1:-1:-1::0;;;;;;5534:33:37;;::::1;::::0;::::1;::::0;;;5603:11;;5581:14;;;;;;;:19:::1;;:33:::0;;;::::1;5603:11:::0;;;::::1;5581:33:::0;;;::::1;::::0;;;5628:19;;::::1;;::::0;;5406:252:::1;5667:12;:14:::0;;;:12:::1;:14;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;5730:26:37;;::::1;5692:35;5730:26:::0;;;::::1;::::0;;;;;;5766:25:::1;::::0;::::1;:42:::0;;5730:26;;5795:13;::::1;;::::0;5766:25;;:42:::1;::::0;5795:13;;5766:42:::1;:::i;:::-;::::0;;;-1:-1:-1;;5818:30:37;;5847:1:::1;::::0;5818:13;;:25:::1;::::0;:30:::1;::::0;5847:1;;5818:30:::1;:::i;:::-;::::0;;;-1:-1:-1;;5864:23:37::1;::::0;;-1:-1:-1;;;;;11035:32:50;;;11017:51;;11104:32;;11099:2;11084:18;;11077:60;5864:23:37::1;::::0;10990:18:50;5864:23:37::1;;;;;;;4945:949;;4875:1019:::0;;:::o;14051:531::-;14134:14;2334:13:23;:11;:13::i;:::-;14205:7:37::1;:14:::0;14176:5;;14195:24;::::1;14191:163;;-1:-1:-1::0;14243:1:37::1;14191:163;;;14282:7;:14:::0;14265::::1;14274:5:::0;14265:6;:14:::1;:::i;:::-;:31;14261:93;;;14320:7;:14:::0;:23:::1;::::0;14337:6;;14320:23:::1;:::i;:::-;14312:31;;14261:93;14364:21;14400:5;-1:-1:-1::0;;;;;14388:18:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;14388:18:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;14364:42:37;-1:-1:-1;14421:9:37::1;14416:136;14440:5;14436:1;:9;14416:136;;;14478:63;;;;;;;;14501:1;14492:6;:10;;;;:::i;:::-;:14;::::0;14505:1:::1;14492:14;:::i;:::-;14478:63:::0;;::::1;;14520:7;14528:10;14537:1:::0;14528:6;:10:::1;:::i;:::-;14520:19;;;;;;;;:::i;:::-;;;;;;;;14478:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;14478:63:37::1;::::0;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;;;;;;;;;;::::0;14466:6:::1;14473:1;14466:9;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:75;14447:3:::1;;14416:136;;;-1:-1:-1::0;14569:6:37;-1:-1:-1;;2357:1:23::1;14051:531:37::0;;;;:::o;4161:214:25:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;:::-;4161:214:::0;;:::o;3708:134::-;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:25;:::o;6502:354:37:-;6580:33;6602:10;6580:21;:33::i;:::-;6575:96;;6636:24;;-1:-1:-1;;;6636:24:37;;;;;;;;;;;6575:96;6681:44;6712:12;;6681:30;:44::i;:::-;6752:10;6736:15;:27;;;;;;;;;;:40;;:55;6779:12;;6736:40;:55;:::i;:::-;;6807:42;6824:10;6836:12;;6807:42;;;;;;;;:::i;:::-;;;;;;;;6502:354;;:::o;5900:596::-;5993:10;5979:25;;;;:13;:25;;;;;;;;5975:91;;;6027:28;;-1:-1:-1;;;6027:28:37;;;;;;;;;;;5975:91;6076:44;6107:12;;6076:30;:44::i;:::-;6131:30;6176:94;;;;;;;;6204:1;6176:94;;;;6220:1;6176:94;;;;6235:5;6176:94;;;;;;6256:12;;6176:94;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6176:94:37;;;;-1:-1:-1;;6281:16:37;:18;;6131:139;;-1:-1:-1;6281:16:37;-1:-1:-1;6281:18:37;;;:::i;:::-;;;;-1:-1:-1;;6323:10:37;6309:25;;;;6337:4;6309:25;;;;;;;;:32;;-1:-1:-1;;6309:32:37;;;;;;;;6351:27;;;;;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:27;:39;;;;;;;;:::i;:::-;-1:-1:-1;;6400:11:37;:28;;;;;;;-1:-1:-1;6400:28:37;;;;;;;;-1:-1:-1;;;;;;6400:28:37;6417:10;6400:28;;;;;;6444:45;;;;-1:-1:-1;6444:45:37;;6417:10;6476:12;;;;6444:45;:::i;:::-;;;;;;;;5965:531;5900:596;;:::o;7431:1215::-;7483:27;7505:4;7483:21;:27::i;:::-;7478:90;;7533:24;;-1:-1:-1;;;7533:24:37;;;;;;;;;;;7478:90;-1:-1:-1;;;;;7616:21:37;;7578:35;7616:21;;;;;;;;;;7651:24;;;;;;7647:85;;;7698:23;;-1:-1:-1;;;7698:23:37;;;;;;;;;;;7647:85;7746:13;:26;;:33;;;;;:::i;:::-;;;7783:1;7746:38;7742:110;;7807:34;;-1:-1:-1;;;7807:34:37;;;;;;;;;;;7742:110;7891:10;7862:18;7883:19;;;:7;:19;;;;;7916:15;;-1:-1:-1;;;;;7916:23:37;;;:15;;:23;7912:80;;7962:19;;-1:-1:-1;;;7962:19:37;;;;;;;;;;;7912:80;8006:15;;-1:-1:-1;;;;;8006:15:37;:29;8002:69;;8051:9;:7;:9::i;:::-;;8002:69;8103:88;;;;;;;;-1:-1:-1;;;;;8103:88:37;;;;;8135:10;:18;;8103:88;;;;;;;-1:-1:-1;8103:88:37;;;;;;;;;;;;8081:19;;;:7;:19;;;;;;;:110;;;;;;;-1:-1:-1;;;;;;8081:110:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8206:11;;;8202:277;;8247:11;:24;;8261:10;-1:-1:-1;;;;;;8247:24:37;;;;;;;;8285:11;:24;;;;;;;;;;8202:277;;;8348:11;;;-1:-1:-1;;;;;8348:11:37;;;8340:20;;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;8340:38:37;;;8368:10;8340:38;;;;;;8419:11;;8392:19;;;;;;;:24;;:38;;;;8419:11;;;;8392:38;;;;;;;8444:24;;;;;;8202:277;8488:12;:14;;;:12;:14;;;:::i;:::-;;;;;;8542:10;-1:-1:-1;;;;;8542:18:37;;8513:13;:25;;;:47;;;;;;;:::i;:::-;;;;-1:-1:-1;;8570:30:37;;8599:1;;8570:13;;:25;;:30;;8599:1;;8570:30;:::i;:::-;;;;-1:-1:-1;;8616:23:37;;;8622:10;11017:51:50;;-1:-1:-1;;;;;11104:32:50;;11099:2;11084:18;;11077:60;8616:23:37;;10990:18:50;8616:23:37;10843:300:50;3155:101:23;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;3885:984:37:-;2334:13:23;:11;:13::i;:::-;4000:7:37::1;:14:::0;:18;3996:76:::1;;4041:20;;-1:-1:-1::0;;;4041:20:37::1;;;;;;;;;;;3996:76;-1:-1:-1::0;;;;;4086:19:37;::::1;;::::0;;;:13:::1;:19;::::0;;;;;::::1;;4082:85;;;4128:28;;-1:-1:-1::0;;;4128:28:37::1;;;;;;;;;;;4082:85;4181:14;:39;4206:12;;4196:23;;;;;;;:::i;:::-;;::::0;;;;;::::1;::::0;;;4181:39;;::::1;::::0;::::1;::::0;;;;;-1:-1:-1;4181:39:37;;::::1;;4177:102;;;4243:25;;-1:-1:-1::0;;;4243:25:37::1;;;;;;;;;;;4177:102;4341:24:::0;;4337:99:::1;;4381:44;4412:12;;4381:30;:44::i;:::-;4446:30;4491:99;;;;;;;;4519:1;4491:99;;;;4535:1;4491:99;;;;4550:10;4491:99;;;;;;4576:12;;4491:99;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4491:99:37;;;;-1:-1:-1;;4601:16:37::1;:18:::0;;4446:144;;-1:-1:-1;4601:16:37;-1:-1:-1;4601:18:37::1;::::0;::::1;:::i;:::-;::::0;;;-1:-1:-1;;;;;;;4629:19:37;::::1;;::::0;;;4651:4:::1;4629:19;::::0;;;;;;;:26;;-1:-1:-1;;4629:26:37;;::::1;::::0;::::1;::::0;;;4665:21;;;;;;;:33;;;;;;::::1;::::0;;;::::1;::::0;;;;;;::::1;::::0;::::1;::::0;::::1;::::0;;;;::::1;::::0;::::1;;;::::0;;;::::1;::::0;::::1;::::0;;;:21;:33:::1;::::0;::::1;::::0;::::1;::::0;;::::1;:::i;:::-;-1:-1:-1::0;;4708:11:37::1;:22:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;4708:22:37;;;;;::::1;::::0;;-1:-1:-1;;;;;;4708:22:37::1;-1:-1:-1::0;;;;;4708:22:37;::::1;;::::0;;-1:-1:-1;4741:67:37;::::1;;;4771:24;:26:::0;;;:24:::1;:26;::::0;::::1;:::i;:::-;;;;;;4741:67;4823:39;4843:4;4849:12;;4823:39;;;;;;;;:::i;:::-;;;;;;;;3986:883;3885:984:::0;;;;:::o;3634:112::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;3685:26:37::1;3700:10;3685:14;:26::i;:::-;3738:1;3721:14;:18:::0;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;15919:50:50;;5142:14:24;;15907:2:50;15892:18;5142:14:24;15766:209:50;5066:101:24;4092:1081;;;;;3634:112:37:o;8919:2360::-;2334:13:23;:11;:13::i;:::-;8996:1:37::1;:6;;9001:1;8996:6:::0;8992:63:::1;;9025:19;;-1:-1:-1::0;;;9025:19:37::1;;;;;;;;;;;8992:63;9065:18;::::0;::::1;:14;:18:::0;9094:21:::1;9103:11;9094:8;:21::i;:::-;9125:25;:23;:25::i;:::-;9161:21;:34:::0;;-1:-1:-1;;;;;;9161:34:37::1;::::0;;9255:24:::1;::::0;9236:16:::1;::::0;9193:1:::1;::::0;9223:57:::1;::::0;::::1;::::0;::::1;::::0;9193:1;;9236:43:::1;::::0;9255:24;9236:43:::1;:::i;:::-;9223:6;:57::i;:::-;9205:76;;9296:3;:8;;9303:1;9296:8:::0;9292:66:::1;;9327:20;;-1:-1:-1::0;;;9327:20:37::1;;;;;;;;;;;9292:66;9373:9;9368:936;9392:11;:18:::0;9388:22;::::1;9368:936;;;9431:12;9446:11;9458:1;9446:14;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;9446:14:37::1;9504:21:::0;;;;;;;;;;;9544:15:::1;::::0;::::1;::::0;9446:14;;-1:-1:-1;9504:21:37;9544:15:::1;;::::0;:48:::1;;;9563:4;:17;;:24;;;;;:::i;:::-;:29:::0;;-1:-1:-1;9544:48:37::1;9540:95;;;9612:8;;;;9540:95;9653:21;::::0;-1:-1:-1;;;;;9653:21:37::1;9649:172;;-1:-1:-1::0;9708:21:37::1;:28:::0;;-1:-1:-1;;;;;;9708:28:37::1;-1:-1:-1::0;;;;;9708:28:37;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;9754:22:37::1;:26:::0;9798:8:::1;;9649:172;9864:3;9839:28;;:22;;:28;9835:120;;;9887:27;9904:4;9910:3;9887:16;:27::i;:::-;9932:8;;;;9835:120;10018:21;::::0;-1:-1:-1;;;;;10018:21:37;;::::1;9969:30;10002:38:::0;;;::::1;::::0;;;;;;;;10108:35;;;;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;::::1;::::0;;;;;;10018:21;10108:35;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;10002:38;;10076:143:::1;::::0;10108:35;;;::::1;::::0;;;10137:4;;10108:35;;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;10108:35:37;;;;-1:-1:-1;;;10108:35:37;;10145:56:::1;::::0;;;;::::1;::::0;;10162:21:::1;::::0;-1:-1:-1;;;;;10162:21:37::1;10145:56:::0;;;;::::1;::::0;::::1;::::0;;;;;;10162:21;10145:56;::::1;::::0;::::1;::::0;;::::1;::::0;;;;::::1;::::0;::::1;::::0;::::1;;;;::::0;;;;;;;::::1;::::0;::::1;::::0;;;;;::::1;::::0;10191:8;;10145:56;;;;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;::::0;10076:10:::1;:143::i;:::-;10055:239;;;10252:27;10269:4;10275:3;10252:16;:27::i;:::-;9417:887;;;9368:936;9412:3;;9368:936;;;;10318:22;;10344:1;10318:27:::0;10314:85:::1;;10368:20;;-1:-1:-1::0;;;10368:20:37::1;;;;;;;;;;;10314:85;10505:21;::::0;10583:22:::1;::::0;-1:-1:-1;;;;;10505:21:37;;::::1;::::0;10490:12:::1;::::0;-1:-1:-1;;;;;10569:37:37;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;10569:37:37::1;-1:-1:-1::0;10536:70:37;-1:-1:-1;10622:9:37::1;10617:148;10641:22;;10637:1;:26;10617:148;;;10703:4;10684:13;10698:1;10684:16;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;10684:23:37;;::::1;:16;::::0;;::::1;::::0;;;;;;:23;;;;10728:26;;::::1;;::::0;;;:20:::1;:26:::0;;;;;;;;;;::::1;::::0;;10665:3:::1;10617:148;;;;10774:26;10786:13;10774:11;:26::i;:::-;10886:7;:14:::0;;::::1;::::0;::::1;::::0;;10853:30:::1;10886:14:::0;;;;::::1;::::0;10910:24:::1;::::0;10917:17:::1;::::0;10910:24:::1;:::i;:::-;10978:14;;-1:-1:-1::0;;;;;10964:29:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;10964:29:37::1;-1:-1:-1::0;10944:49:37;;::::1;::::0;:17:::1;::::0;:49:::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;11009:9:37::1;11004:269;11028:14;;11024:1;:18;11004:269;;;11063:12;11078:13;11096:22;;11092:1;:26;;;;:::i;:::-;11078:41;;;;;;;;:::i;:::-;;;;;;;11063:56;;11156:4;11133:17;11151:1;11133:20;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;:27:::0;;-1:-1:-1;;;;;11133:27:37;;::::1;-1:-1:-1::0;;;;;;11133:27:37;;::::1;;::::0;;;11185:76:::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;;11226:21;;;;;;;11133:27;11226:33;;::::1;::::0;11185:76;;::::1;::::0;;;11174:88;;;;::::1;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;::::1;;::::0;;;;;::::1;::::0;11044:3:::1;11004:269;;;;8982:2297;;;;8919:2360:::0;:::o;12140:433::-;12268:17;:24;12194:18;;12224:25;;-1:-1:-1;;;;;12252:41:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;12224:69:37;-1:-1:-1;12308:9:37;12303:240;12327:17;:24;12323:28;;12303:240;;;12372:12;12387:17;12405:1;12387:20;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12387:20:37;12450:21;;;;;;;;;;;12497:35;;;;;;;;;;;;;;;;;;;;;12387:20;12497:35;;;;;;;;;;;;;;;;;;;;;;;;;;;12387:20;;-1:-1:-1;12450:21:37;;12497:35;;;;;;;12450:21;;12497:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12485:6;12492:1;12485:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;12353:3:37;;12303:240;;;-1:-1:-1;12560:6:37;12140:433;-1:-1:-1;12140:433:37:o;6862:563::-;6913:33;6935:10;6913:21;:33::i;:::-;6908:94;;6969:22;;-1:-1:-1;;;6969:22:37;;;;;;;;;;;6908:94;7062:10;7012:31;7046:27;;;;;;;;;;7087:20;;;;;;7083:84;;;7130:26;;-1:-1:-1;;;7130:26:37;;;;;;;;;;;7083:84;7228:14;;7200:24;;7181:16;;:43;;;;:::i;:::-;:61;7177:120;;7265:21;;-1:-1:-1;;;7265:21:37;;;;;;;;;;;7177:120;7307:20;;;:27;;-1:-1:-1;;7307:27:37;7330:4;7307:27;;;;;;7344:24;:29;;7307:20;;7344:29;;7330:4;;7344:29;:::i;:::-;;;;-1:-1:-1;;7389:29:37;;7407:10;7899:51:50;;7389:29:37;;7887:2:50;7872:18;7389:29:37;;;;;;;6898:527;6862:563::o;11760:115::-;-1:-1:-1;;;;;11849:19:37;11826:4;11849:19;;;:13;:19;;;;;;;;;11760:115::o;13096:847::-;13176:19;2334:13:23;:11;:13::i;:::-;13207:26:37::1;13253:30;13260:5;13267:1;13270:12;;13253:6;:30::i;:::-;-1:-1:-1::0;;;;;13236:48:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;13236:48:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;13310:11:37::1;::::0;13207:77;;-1:-1:-1;;;;;;13310:11:37;;::::1;::::0;13336:18;::::1;::::0;13332:74:::1;;-1:-1:-1::0;;;;;;13377:13:37;;::::1;;::::0;;;:7:::1;:13;::::0;;;;:18:::1;;::::0;::::1;13332:74;13416:9;13439:211;-1:-1:-1::0;;;;;13446:18:37;::::1;::::0;;::::1;::::0;:31:::1;;;13472:5;13468:1;:9;13446:31;13439:211;;;-1:-1:-1::0;;;;;13514:13:37;;::::1;13493:18;13514:13:::0;;;:7:::1;:13;::::0;;;;;;;;13555:53;;;;::::1;::::0;;;;;;13591:15;;;;::::1;13555:53:::0;;::::1;::::0;;;;13514:13;13541:6;13548:3;::::1;::::0;::::1;:::i;:::-;;;13541:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:67;13629:10:::1;;::::0;-1:-1:-1;;;;;13629:10:37::1;::::0;-1:-1:-1;13439:211:37::1;;;13681:1;13664:6;:13;:18:::0;13660:62:::1;;13705:6;13698:13;;;;;;;13660:62;13780:25;13825:1;-1:-1:-1::0;;;;;13808:19:37::1;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;;;;;;;;;;;;;13808:19:37::1;;;;;;;;;;;;;;;-1:-1:-1::0;13780:47:37;-1:-1:-1;13842:9:37::1;13837:77;13861:1;13857;:5;13837:77;;;13894:6;13901:1;13894:9;;;;;;;;:::i;:::-;;;;;;;13883:5;13889:1;13883:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:20;13864:3:::1;;13837:77;;;-1:-1:-1::0;13931:5:37;13096:847;-1:-1:-1;;;;;;13096:847:37:o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;7899:51:50::0;7872:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;:::-;3405:215:::0;:::o;12579:412:37:-;12704:11;:18;12630;;12660:25;;-1:-1:-1;;;;;12688:35:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;12660:63:37;-1:-1:-1;12738:9:37;12733:228;12757:11;:18;12753:22;;12733:228;;;12796:12;12811:11;12823:1;12811:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;12811:14:37;12868:21;;;;;;;;;;;12915:35;;;;;;;;;;;;;;;;;;;;;12811:14;12915:35;;;;;;;;;;;;;;;;;;;;;;;;;;;12811:14;;-1:-1:-1;12868:21:37;;12915:35;;;;;;;12868:21;;12915:35;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12903:6;12910:1;12903:9;;;;;;;;:::i;:::-;;;;;;;;;;:47;-1:-1:-1;;12777:3:37;;12733:228;;2658:162:23;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;7899:51:50;7872:18;;2763:40:23;7753:203:50;18813:506:37;-1:-1:-1;;;;;18889:13:37;;;18868:18;18889:13;;;:7;:13;;;;;18916:15;;18889:13;;18916:15;18912:66;;18961:7;18813:506;:::o;18912:66::-;19011:13;;;;-1:-1:-1;;;;;19054:12:37;;;19039:27;;19035:239;;;19130:27;19145:12;-1:-1:-1;;;;;19130:12:37;;;:27;:::i;:::-;19098:15;;-1:-1:-1;;;;;19098:15:37;19082;:32;;;;;;;;;;19098:15;19082:44;:75;;:44;;:15;:75;;;;;:::i;:::-;;;;-1:-1:-1;19035:239:37;;-1:-1:-1;19035:239:37;;19236:27;-1:-1:-1;;;;;19251:12:37;;;19236;:27;:::i;:::-;19204:15;;-1:-1:-1;;;;;19204:15:37;19188;:32;;;;;;;;;;19204:15;19188:44;:75;;:44;;:15;:75;;;;;:::i;:::-;;;;-1:-1:-1;;19035:239:37;-1:-1:-1;;;;;;19300:12:37;;;;19284:13;;;;:28;18813:506::o;17760:1047::-;17845:10;17797:7;17837:19;;;:7;:19;;;;;17870:15;;-1:-1:-1;;;;;17870:15:37;17866:80;;17922:13;;-1:-1:-1;;;17922:13:37;;;;;;;;;;;17866:80;17975:11;;17960;;-1:-1:-1;;;;;17975:11:37;;;17960;;:26;17956:528;;18002:11;:24;;-1:-1:-1;;;;;;18002:24:37;;;;;;18040:11;:24;;;;;;;17956:528;;;18085:11;;18100:10;-1:-1:-1;;;;;18085:11:37;;;:25;18081:403;;18134:10;;;;;-1:-1:-1;;;;;18134:10:37;;;18161:1;18126:19;;;:7;:19;;;;;:24;;:37;;-1:-1:-1;;;;;;18126:37:37;;;;;;18191:10;;18177:11;:24;;;;;18191:10;;18177:24;;;18081:403;;;18222:11;;18237:10;-1:-1:-1;;;;;18222:11:37;;;:25;18218:266;;18271:11;;-1:-1:-1;;;;;18271:11:37;;;18299:1;18263:20;;;:7;:20;;;;;;:25;;:38;;-1:-1:-1;;;;;;18263:38:37;;;;;;18337:11;;;;;;18329:20;;;;;;:25;;;18315:39;;18329:25;;18315:39;;;;;;18218:266;;;18412:10;;;;;;18393;;;;;;-1:-1:-1;;;;;18393:10:37;;;18412;18385:19;;;:7;:19;;;;;;:24;;;:37;;18412:10;;;-1:-1:-1;;;;;;18385:37:37;;;;;;18463:10;;18444;;;;18436:19;;;;;:24;:37;;18463:10;;;;18436:37;;;;;18218:266;18518:15;;-1:-1:-1;;;;;18518:15:37;18494:21;18582:32;;;;;;;;;;18518:15;18654:13;;;;18625:25;;;:42;;18582:32;;18654:13;;18625:25;;18494:21;18625:42;;18654:13;;18625:42;:::i;:::-;;;;-1:-1:-1;;18677:30:37;;18706:1;;18677:13;;:25;;:30;;18706:1;;18677:30;:::i;:::-;;;;-1:-1:-1;;18733:10:37;18725:19;;;;:7;:19;;;;;18718:26;;-1:-1:-1;;;;;;18718:26:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18755:12;:14;;;;;;:::i;:::-;;;;-1:-1:-1;18787:13:37;;17760:1047;-1:-1:-1;;;;17760:1047:37:o;4603:312:25:-;4683:4;-1:-1:-1;;;;;4692:6:25;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:25;:32;-1:-1:-1;;;;;;;;;;;1519:53:30;-1:-1:-1;;;;;1519:53:30;;1441:138;4753:32:25;-1:-1:-1;;;;;4753:42:25;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:25;;;;;;;;;;;3769:84:37;2334:13:23;:11;:13::i;6057:538:25:-;6174:17;-1:-1:-1;;;;;6156:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:25;;;;;;;;-1:-1:-1;;6156:52:25;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:25;;-1:-1:-1;;;;;7917:32:50;;6518:60:25;;;7899:51:50;7872:18;;6518:60:25;7753:203:50;6152:437:25;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:25;;;;;160:25:50;;;133:18;;6317:34:25;14:177:50;6246:120:25;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:25;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:25;;;;;;;;;;;19325:348:37;19413:24;19450:12;;19440:23;;;;;;;:::i;:::-;;;;;;;;;;;19477:32;;;;:14;:32;;;;;;;19440:23;;-1:-1:-1;19477:32:37;;19473:95;;;19532:25;;-1:-1:-1;;;19532:25:37;;;;;;;;;;;19473:95;19578:38;19603:12;;19578:24;:38::i;:::-;19627:32;;;;:14;:32;;;;;:39;;-1:-1:-1;;19627:39:37;19662:4;19627:39;;;-1:-1:-1;;19325:348:37:o;3774:248:23:-;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;14614:502:37:-:0;14688:12;;14676:9;14714:6;;;14710:43;;14736:7;14614:502;:::o;14710:43::-;14768:9;14780:5;14784:1;14780;:5;:::i;:::-;14768:17;;14763:347;14787:5;;14763:347;;14875:9;14947:5;:1;14951;14947:5;:::i;:::-;14905:36;;;14922:15;14905:36;;;16681:19:50;16716:12;;;16709:28;;;16753:12;;14905:36:37;;;;;;;;;;;;14895:47;;;;;;14887:56;;:66;;;;:::i;:::-;14875:78;;15014:12;15029:5;15035:1;15029:8;;;;;;;;:::i;:::-;;;;;;;;;;;15062;;-1:-1:-1;;;;;15029:8:37;;;;-1:-1:-1;15062:5:37;;15068:1;;15062:8;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;15062:8:37;15051:5;15057:1;15051:8;;;;;;;;:::i;:::-;;;;;;;;;:19;;;;;-1:-1:-1;;;;;15051:19:37;;;;;-1:-1:-1;;;;;15051:19:37;;;;;;15095:4;15084:5;15090:1;15084:8;;;;;;;;:::i;:::-;;;;;;;;;:15;;;;;-1:-1:-1;;;;;15084:15:37;;;;;-1:-1:-1;;;;;15084:15:37;;;;;;14799:311;;14794:3;;;;;:::i;:::-;;;;14763:347;;15637:317;15706:21;;-1:-1:-1;;;;;15706:21:37;15738:174;-1:-1:-1;;;;;15745:18:37;;;15738:174;;-1:-1:-1;;;;;15822:29:37;;;15779:15;15822:29;;;:20;:29;;;;;;;-1:-1:-1;;;;;;15865:36:37;;;;;15822:29;15738:174;;;-1:-1:-1;15946:1:37;15921:22;:26;15637:317::o;20216:337::-;20296:7;20325:3;20319;:9;20315:69;;;20351:22;;-1:-1:-1;;;20351:22:37;;;;;16950:25:50;;;16991:18;;;16984:34;;;16923:18;;20351:22:37;16776:248:50;20315:69:37;20406:3;20398:5;:11;20394:153;;;-1:-1:-1;20432:3:37;20425:10;;20394:153;20464:3;20456:5;:11;20452:95;;;-1:-1:-1;20490:3:37;20483:10;;20452:95;-1:-1:-1;20531:5:37;20452:95;20216:337;;;;;:::o;15960:1391::-;-1:-1:-1;;;;;16058:21:37;;16030:25;16058:21;;;;;;;;;;;16030:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;16030:49:37;;;;-1:-1:-1;;16135:86:37;;;;;;;;16152:21;;-1:-1:-1;;;;;16152:21:37;16135:86;;;-1:-1:-1;16181:38:37;;;16135:86;16181:38;;;;;;;16135:86;;;;;;;;;;;16152:21;16135:86;;;;;;;;;;;;;;;;;;;;;;;;;;;16030:49;;-1:-1:-1;16107:181:37;;16135:86;;-1:-1:-1;16135:86:37;;;;;16181:38;;16135:86;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16239:35;;;;;;;;16256:4;-1:-1:-1;;;;;16239:35:37;;;;;16268:4;16239:35;;;16107:10;:181::i;:::-;16090:984;;;16313:17;16325:4;16313:11;:17::i;:::-;16090:984;;;16400:21;;-1:-1:-1;;;;;16400:21:37;;;16361:15;16379:43;;;:20;:43;;;;;;;;;;16491:573;-1:-1:-1;;;;;16526:21:37;;16522:123;;16571:28;16584:8;16594:4;16571:12;:28::i;:::-;16621:5;;16522:123;16724:58;;;;;;;;-1:-1:-1;;;;;16724:58:37;;;;;-1:-1:-1;16756:24:37;;;16724:58;16756:24;;;;;;;16724:58;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16688:153;;16724:58;;;;;16756:24;16724:58;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16784:35;;;;;;;;16801:4;-1:-1:-1;;;;;16784:35:37;;;;;16813:4;16784:35;;;16688:10;:153::i;:::-;16663:293;;;16882:28;16895:8;16905:4;16882:12;:28::i;16663:293::-;-1:-1:-1;;;;;;17020:29:37;;;;;;;:20;:29;;;;;;;;16491:573;;;16347:727;;16090:984;17113:3;17088:28;;:22;;:28;17084:261;;;17168:21;;;-1:-1:-1;;;;;17168:21:37;;;17132:12;17147:43;;;:20;:43;;;;;;;-1:-1:-1;;;;;;17204:50:37;;;;;;17268:28;;17147:43;;17268:28;;;;;;;17310:22;:24;;17147:43;;17310:24;;;:::i;:::-;;;;;;17118:227;16020:1331;15960:1391;;:::o;19883:327::-;19984:4;20035:10;:15;;;:27;;;20004:10;:15;;;:27;;;:58;20000:129;;-1:-1:-1;20103:15:37;;20085;;-1:-1:-1;;;;;20085:33:37;;;;;;20078:40;;20000:129;-1:-1:-1;20176:15:37;;;;;:27;;;20146:15;;;;:27;;:57;;19883:327::o;15122:509::-;15203:12;;15191:9;15229:6;;;15225:43;;15251:7;15122:509;:::o;15225:43::-;15283:9;15295:5;15299:1;15295;:5;:::i;:::-;15283:17;;15278:347;15302:5;;15278:347;;15390:9;15462:5;:1;15466;15462:5;:::i;:::-;15420:36;;;15437:15;15420:36;;;16681:19:50;16716:12;;;16709:28;;;16753:12;;15420:36:37;;;;;;;;;;;;15410:47;;;;;;15402:56;;:66;;;;:::i;:::-;15390:78;;15529:12;15544:5;15550:1;15544:8;;;;;;;;:::i;:::-;;;;;;;15529:23;;15577:5;15583:1;15577:8;;;;;;;;:::i;:::-;;;;;;;15566:5;15572:1;15566:8;;;;;;;;:::i;:::-;;;;;;:19;-1:-1:-1;;;;;15566:19:37;;;-1:-1:-1;;;;;15566:19:37;;;;;15610:4;15599:5;15605:1;15599:8;;;;;;;;:::i;:::-;;;;;;:15;-1:-1:-1;;;;;15599:15:37;;;-1:-1:-1;;;;;15599:15:37;;;;;15314:311;;15309:3;;;;;:::i;:::-;;;;15278:347;;2264:344:30;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:30;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;19710:167:37:-;19818:2;19798:22;;19794:77;;19843:17;;-1:-1:-1;;;19843:17:37;;;;;;;;;;;7084:141:24;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;17357:183:37:-;17440:21;;;-1:-1:-1;;;;;17411:26:37;;;17440:21;17411:26;;;:20;:26;;;;;:50;;17440:21;;;;-1:-1:-1;;;;;;17411:50:37;;;;;;;17471:28;;;;;;;;;17509:22;:24;;;;;;:::i;:::-;;;;;;17357:183;:::o;17546:208::-;-1:-1:-1;;;;;17644:26:37;;;;;;;:20;:26;;;;;;;;17615;;;;;;;;;:55;;17644:26;;;;-1:-1:-1;;;;;;17615:55:37;;;;;;;17680:26;;;:33;;;;;;;;;;17723:22;:24;;;;;;:::i;:::-;;;;;;17546:208;;:::o;1671:281:30:-;1748:17;-1:-1:-1;;;;;1748:29:30;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:30;;-1:-1:-1;;;;;7917:32:50;;1805:47:30;;;7899:51:50;7872:18;;1805:47:30;7753:203:50;1744:119:30;-1:-1:-1;;;;;;;;;;;1872:73:30;;-1:-1:-1;;;;;;1872:73:30;-1:-1:-1;;;;;1872:73:30;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:30:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:30;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;7917:32:50;;4917:24:34;;;7899:51:50;7872:18;;4917:24:34;7753:203:50;4837:119:34;-1:-1:-1;4976:10:34;4969:17;;5543:487;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;196:173:50;264:20;;-1:-1:-1;;;;;313:31:50;;303:42;;293:70;;359:1;356;349:12;293:70;196:173;;;:::o;374:186::-;433:6;486:2;474:9;465:7;461:23;457:32;454:52;;;502:1;499;492:12;454:52;525:29;544:9;525:29;:::i;565:250::-;650:1;660:113;674:6;671:1;668:13;660:113;;;750:11;;;744:18;731:11;;;724:39;696:2;689:10;660:113;;;-1:-1:-1;;807:1:50;789:16;;782:27;565:250::o;820:270::-;861:3;899:5;893:12;926:6;921:3;914:19;942:76;1011:6;1004:4;999:3;995:14;988:4;981:5;977:16;942:76;:::i;:::-;1072:2;1051:15;-1:-1:-1;;1047:29:50;1038:39;;;;1079:4;1034:50;;820:270;-1:-1:-1;;820:270:50:o;1095:566::-;1212:1;1208;1203:3;1199:11;1195:19;1187:5;1181:12;1177:38;1172:3;1165:51;1147:3;1262:4;1255:5;1251:16;1245:23;1300:4;1293;1288:3;1284:14;1277:28;1343:12;1337:19;1330:4;1325:3;1321:14;1314:43;1411:4;1397:12;1393:23;1387:30;1382:2;1377:3;1373:12;1366:52;1488:4;1474:12;1470:23;1464:30;1457:38;1450:46;1443:4;1438:3;1434:14;1427:70;1552:2;1538:12;1534:21;1528:28;1506:50;;1587:4;1581:3;1576;1572:13;1565:27;1608:47;1650:3;1645;1641:13;1625:14;1608:47;:::i;:::-;1601:54;1095:566;-1:-1:-1;;;;1095:566:50:o;1666:266::-;1851:2;1840:9;1833:21;1814:4;1871:55;1922:2;1911:9;1907:18;1899:6;1871:55;:::i;1937:610::-;2023:6;2031;2084:2;2072:9;2063:7;2059:23;2055:32;2052:52;;;2100:1;2097;2090:12;2052:52;2140:9;2127:23;-1:-1:-1;;;;;2165:6:50;2162:30;2159:50;;;2205:1;2202;2195:12;2159:50;2228:22;;2281:4;2273:13;;2269:27;-1:-1:-1;2259:55:50;;2310:1;2307;2300:12;2259:55;2350:2;2337:16;-1:-1:-1;;;;;2368:6:50;2365:30;2362:50;;;2408:1;2405;2398:12;2362:50;2461:7;2456:2;2446:6;2443:1;2439:14;2435:2;2431:23;2427:32;2424:45;2421:65;;;2482:1;2479;2472:12;2421:65;2513:2;2505:11;;;;;2535:6;;-1:-1:-1;1937:610:50;-1:-1:-1;;;1937:610:50:o;2552:260::-;2620:6;2628;2681:2;2669:9;2660:7;2656:23;2652:32;2649:52;;;2697:1;2694;2687:12;2649:52;2720:29;2739:9;2720:29;:::i;:::-;2710:39;;2768:38;2802:2;2791:9;2787:18;2768:38;:::i;:::-;2758:48;;2552:260;;;;;:::o;2817:346::-;2885:6;2893;2946:2;2934:9;2925:7;2921:23;2917:32;2914:52;;;2962:1;2959;2952:12;2914:52;-1:-1:-1;;3007:23:50;;;3127:2;3112:18;;;3099:32;;-1:-1:-1;2817:346:50:o;3168:1554::-;3358:4;3406:2;3395:9;3391:18;3436:2;3425:9;3418:21;3459:6;3494;3488:13;3525:6;3517;3510:22;3563:2;3552:9;3548:18;3541:25;;3625:2;3615:6;3612:1;3608:14;3597:9;3593:30;3589:39;3575:53;;3663:2;3655:6;3651:15;3684:1;3694:999;3708:6;3705:1;3702:13;3694:999;;;3773:22;;;-1:-1:-1;;3769:36:50;3757:49;;3829:13;;3912:9;;3897:25;;3969:2;3961:11;;;3955:18;3881:2;3993:15;;;3986:27;;;4074:19;;3869:15;;;4106:24;;;4196:21;;;-1:-1:-1;;4164:2:50;4152:15;;;4255:330;4271:8;4266:3;4263:17;4255:330;;;4344:15;;4394:9;;-1:-1:-1;;;;;4390:35:50;4376:50;;4480:2;4472:11;;;4466:18;4450:14;;;4443:42;4554:17;;;;4422:1;4290:11;;;;;4522:2;4511:14;;;;4255:330;;;-1:-1:-1;4608:5:50;-1:-1:-1;;;4648:2:50;4671:12;;;;4636:15;;;;;3730:1;3723:9;3694:999;;;-1:-1:-1;4710:6:50;;3168:1554;-1:-1:-1;;;;;;3168:1554:50:o;4727:127::-;4788:10;4783:3;4779:20;4776:1;4769:31;4819:4;4816:1;4809:15;4843:4;4840:1;4833:15;4859:1018;4936:6;4944;4997:2;4985:9;4976:7;4972:23;4968:32;4965:52;;;5013:1;5010;5003:12;4965:52;5036:29;5055:9;5036:29;:::i;:::-;5026:39;;5116:2;5105:9;5101:18;5088:32;-1:-1:-1;;;;;5135:6:50;5132:30;5129:50;;;5175:1;5172;5165:12;5129:50;5198:22;;5251:4;5243:13;;5239:27;-1:-1:-1;5229:55:50;;5280:1;5277;5270:12;5229:55;5320:2;5307:16;-1:-1:-1;;;;;5338:6:50;5335:30;5332:56;;;5368:18;;:::i;:::-;5417:2;5411:9;5509:2;5471:17;;-1:-1:-1;;5467:31:50;;;5500:2;5463:40;5459:54;5447:67;;-1:-1:-1;;;;;5529:34:50;;5565:22;;;5526:62;5523:88;;;5591:18;;:::i;:::-;5627:2;5620:22;5651;;;5692:15;;;5709:2;5688:24;5685:37;-1:-1:-1;5682:57:50;;;5735:1;5732;5725:12;5682:57;5791:6;5786:2;5782;5778:11;5773:2;5765:6;5761:15;5748:50;5844:1;5839:2;5830:6;5822;5818:19;5814:28;5807:39;5865:6;5855:16;;;;;4859:1018;;;;;:::o;6064:347::-;6115:8;6125:6;6179:3;6172:4;6164:6;6160:17;6156:27;6146:55;;6197:1;6194;6187:12;6146:55;-1:-1:-1;6220:20:50;;-1:-1:-1;;;;;6252:30:50;;6249:50;;;6295:1;6292;6285:12;6249:50;6332:4;6324:6;6320:17;6308:29;;6384:3;6377:4;6368:6;6360;6356:19;6352:30;6349:39;6346:59;;;6401:1;6398;6391:12;6346:59;6064:347;;;;;:::o;6416:409::-;6486:6;6494;6547:2;6535:9;6526:7;6522:23;6518:32;6515:52;;;6563:1;6560;6553:12;6515:52;6603:9;6590:23;-1:-1:-1;;;;;6628:6:50;6625:30;6622:50;;;6668:1;6665;6658:12;6622:50;6707:58;6757:7;6748:6;6737:9;6733:22;6707:58;:::i;:::-;6784:8;;6681:84;;-1:-1:-1;6416:409:50;-1:-1:-1;;;;6416:409:50:o;6830:644::-;6915:6;6923;6931;6939;6992:2;6980:9;6971:7;6967:23;6963:32;6960:52;;;7008:1;7005;6998:12;6960:52;7031:29;7050:9;7031:29;:::i;:::-;7021:39;;7111:2;7100:9;7096:18;7083:32;-1:-1:-1;;;;;7130:6:50;7127:30;7124:50;;;7170:1;7167;7160:12;7124:50;7209:58;7259:7;7250:6;7239:9;7235:22;7209:58;:::i;:::-;7286:8;;-1:-1:-1;7183:84:50;-1:-1:-1;;7371:2:50;7356:18;;7343:32;7411:13;;7404:21;7394:32;;7384:60;;7440:1;7437;7430:12;7384:60;6830:644;;;;-1:-1:-1;6830:644:50;;-1:-1:-1;;6830:644:50:o;7479:269::-;7536:6;7589:2;7577:9;7568:7;7564:23;7560:32;7557:52;;;7605:1;7602;7595:12;7557:52;7644:9;7631:23;7694:4;7687:5;7683:16;7676:5;7673:27;7663:55;;7714:1;7711;7704:12;7961:828;8159:4;8207:2;8196:9;8192:18;8237:2;8226:9;8219:21;8260:6;8295;8289:13;8326:6;8318;8311:22;8364:2;8353:9;8349:18;8342:25;;8426:2;8416:6;8413:1;8409:14;8398:9;8394:30;8390:39;8376:53;;8464:2;8456:6;8452:15;8485:1;8495:265;8509:6;8506:1;8503:13;8495:265;;;8602:2;8598:7;8586:9;8578:6;8574:22;8570:36;8565:3;8558:49;8630:50;8673:6;8664;8658:13;8630:50;:::i;:::-;8620:60;-1:-1:-1;8715:2:50;8738:12;;;;8703:15;;;;;8531:1;8524:9;8495:265;;8794:219;8943:2;8932:9;8925:21;8906:4;8963:44;9003:2;8992:9;8988:18;8980:6;8963:44;:::i;9210:300::-;9278:6;9286;9339:2;9327:9;9318:7;9314:23;9310:32;9307:52;;;9355:1;9352;9345:12;9307:52;9378:29;9397:9;9378:29;:::i;:::-;9368:39;9476:2;9461:18;;;;9448:32;;-1:-1:-1;;;9210:300:50:o;9515:806::-;9763:2;9775:21;;;9845:13;;9748:18;;;9867:22;;;9715:4;;9946:15;;;9920:2;9905:18;;;9715:4;9989:306;10003:6;10000:1;9997:13;9989:306;;;10062:13;;10104:9;;-1:-1:-1;;;;;10100:35:50;;;10088:48;;10188:2;10180:11;;;10174:18;10170:44;10156:12;;;10149:66;10270:15;;;;10244:2;10235:12;;;;10132:1;10018:9;9989:306;;;-1:-1:-1;10312:3:50;;9515:806;-1:-1:-1;;;;;9515:806:50:o;10326:380::-;10405:1;10401:12;;;;10448;;;10469:61;;10523:4;10515:6;10511:17;10501:27;;10469:61;10576:2;10568:6;10565:14;10545:18;10542:38;10539:161;;10622:10;10617:3;10613:20;10610:1;10603:31;10657:4;10654:1;10647:15;10685:4;10682:1;10675:15;10711:127;10772:10;10767:3;10763:20;10760:1;10753:31;10803:4;10800:1;10793:15;10827:4;10824:1;10817:15;11148:127;11209:10;11204:3;11200:20;11197:1;11190:31;11240:4;11237:1;11230:15;11264:4;11261:1;11254:15;11280:135;11319:3;11340:17;;;11337:43;;11360:18;;:::i;:::-;-1:-1:-1;11407:1:50;11396:13;;11280:135::o;11420:125::-;11485:9;;;11506:10;;;11503:36;;;11519:18;;:::i;11550:128::-;11617:9;;;11638:11;;;11635:37;;;11652:18;;:::i;11808:517::-;11909:2;11904:3;11901:11;11898:421;;;11945:5;11942:1;11935:16;11989:4;11986:1;11976:18;12059:2;12047:10;12043:19;12040:1;12036:27;12030:4;12026:38;12095:4;12083:10;12080:20;12077:47;;;-1:-1:-1;12118:4:50;12077:47;12173:2;12168:3;12164:12;12161:1;12157:20;12151:4;12147:31;12137:41;;12228:81;12246:2;12239:5;12236:13;12228:81;;;12305:1;12291:16;;12272:1;12261:13;12228:81;;12501:1194;-1:-1:-1;;;;;12618:3:50;12615:27;12612:53;;;12645:18;;:::i;:::-;12674:93;12763:3;12723:38;12755:4;12749:11;12723:38;:::i;:::-;12717:4;12674:93;:::i;:::-;12793:1;12818:2;12813:3;12810:11;12835:1;12830:607;;;;13481:1;13498:3;13495:93;;;-1:-1:-1;13554:19:50;;;13541:33;13495:93;-1:-1:-1;;12458:1:50;12454:11;;;12450:24;12446:29;12436:40;12482:1;12478:11;;;12433:57;13601:78;;12803:886;;12830:607;11755:1;11748:14;;;11792:4;11779:18;;-1:-1:-1;;12866:17:50;;;12980:229;12994:7;12991:1;12988:14;12980:229;;;13083:19;;;13070:33;13055:49;;13190:4;13175:20;;;;13143:1;13131:14;;;;13010:12;12980:229;;;12984:3;13237;13228:7;13225:16;13222:159;;;13361:1;13357:6;13351:3;13345;13342:1;13338:11;13334:21;13330:34;13326:39;13313:9;13308:3;13304:19;13291:33;13287:79;13279:6;13272:95;13222:159;;;13424:1;13418:3;13415:1;13411:11;13407:19;13401:4;13394:33;12803:886;;12501:1194;;;:::o;13700:485::-;-1:-1:-1;;;;;13885:32:50;;13867:51;;13954:2;13949;13934:18;;13927:30;;;13973:18;;13966:34;;;13993:6;14042;14037:2;14022:18;;14009:48;14106:1;14077:22;;;14101:2;14073:31;;;14066:42;;;;14169:2;14148:15;;;-1:-1:-1;;14144:29:50;14129:45;14125:54;;13700:485;-1:-1:-1;;13700:485:50:o;14190:1295::-;14314:3;14308:10;-1:-1:-1;;;;;14333:6:50;14330:30;14327:56;;;14363:18;;:::i;:::-;14392:96;14481:6;14441:38;14473:4;14467:11;14441:38;:::i;:::-;14435:4;14392:96;:::i;:::-;14537:4;14568:2;14557:14;;14585:1;14580:648;;;;15272:1;15289:6;15286:89;;;-1:-1:-1;15341:19:50;;;15335:26;15286:89;-1:-1:-1;;12458:1:50;12454:11;;;12450:24;12446:29;12436:40;12482:1;12478:11;;;12433:57;15388:81;;14550:929;;14580:648;11755:1;11748:14;;;11792:4;11779:18;;-1:-1:-1;;14616:20:50;;;14733:222;14747:7;14744:1;14741:14;14733:222;;;14829:19;;;14823:26;14808:42;;14936:4;14921:20;;;;14889:1;14877:14;;;;14763:12;14733:222;;;14737:3;14983:6;14974:7;14971:19;14968:201;;;15044:19;;;15038:26;-1:-1:-1;;15127:1:50;15123:14;;;15139:3;15119:24;15115:37;15111:42;15096:58;15081:74;;14968:201;-1:-1:-1;;;;15215:1:50;15199:14;;;15195:22;15182:36;;-1:-1:-1;14190:1295:50:o;15490:271::-;15673:6;15665;15660:3;15647:33;15629:3;15699:16;;15724:13;;;15699:16;15490:271;-1:-1:-1;15490:271:50:o;15980:209::-;16012:1;16038;16028:132;;16082:10;16077:3;16073:20;16070:1;16063:31;16117:4;16114:1;16107:15;16145:4;16142:1;16135:15;16028:132;-1:-1:-1;16174:9:50;;15980:209::o;16194:136::-;16233:3;16261:5;16251:39;;16270:18;;:::i;:::-;-1:-1:-1;;;16306:18:50;;16194:136::o;16335:184::-;16405:6;16458:2;16446:9;16437:7;16433:23;16429:32;16426:52;;;16474:1;16471;16464:12;16426:52;-1:-1:-1;16497:16:50;;16335:184;-1:-1:-1;16335:184:50:o;17029:287::-;17158:3;17196:6;17190:13;17212:66;17271:6;17266:3;17259:4;17251:6;17247:17;17212:66;:::i;:::-;17294:16;;;;;17029:287;-1:-1:-1;;17029:287:50:o", "linkReferences": {}, "immutableReferences": { "40567": [ @@ -446,7 +446,7 @@ "version()": "54fd4d50", "vote(address)": "6dd7d8ea" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyVoted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BellowMinValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyIsInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImportIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"InvalidRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoActiveValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyResigned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteResignedValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteSameValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteValidatorWithoutBlsPublicKey\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Unvoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"ValidatorResigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"}],\"name\":\"addValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"addVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"}],\"name\":\"calculateActiveValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getRounds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"}],\"internalType\":\"struct RoundValidator[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct Round[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoundsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getVotes\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"internalType\":\"struct VoteResult[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isValidatorRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registeredValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignedValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unvote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"updateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"voters\",\"type\":\"address[]\"}],\"name\":\"updateVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusV1.sol\":\"ConsensusV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/consensus/ConsensusV1.sol\":{\"keccak256\":\"0x0c3bad1c1d75d987b6ee19e7b4828959a5f30bb3c527882b2e34a9efb577ef5f\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://8e82fee7b503264fed7e7dd40cadcec31ebd5b86e9153efe21bfbb349a6fe26a\",\"dweb:/ipfs/QmTwjZmkVfcxXTTFadXLzGpdxpmCCKMhzTBduhSmW5h88m\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AlreadyVoted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BellowMinValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"BlsKeyIsInvalid\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerIsNotValidator\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ImportIsNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidParameters\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"min\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"max\",\"type\":\"uint256\"}],\"name\":\"InvalidRange\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MissingVote\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoActiveValidators\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyResigned\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorNotRegistered\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteResignedValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteSameValidator\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"VoteValidatorWithoutBlsPublicKey\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Unvoted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"ValidatorResigned\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"Voted\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"activeValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"}],\"name\":\"addValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"name\":\"addVote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint8\",\"name\":\"n\",\"type\":\"uint8\"}],\"name\":\"calculateActiveValidators\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getActiveValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAllValidators\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"offset\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getRounds\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"round\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"}],\"internalType\":\"struct ConsensusV1.RoundValidator[]\",\"name\":\"validators\",\"type\":\"tuple[]\"}],\"internalType\":\"struct ConsensusV1.Round[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getRoundsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"getValidator\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"components\":[{\"internalType\":\"uint256\",\"name\":\"votersCount\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"voteBalance\",\"type\":\"uint256\"},{\"internalType\":\"bool\",\"name\":\"isResigned\",\"type\":\"bool\"},{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"internalType\":\"struct ConsensusV1.ValidatorData\",\"name\":\"data\",\"type\":\"tuple\"}],\"internalType\":\"struct ConsensusV1.Validator\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"count\",\"type\":\"uint256\"}],\"name\":\"getVotes\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"voter\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"validator\",\"type\":\"address\"}],\"internalType\":\"struct ConsensusV1.VoteResult[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVotesCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"isValidatorRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"registeredValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignedValidatorsCount\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"unvote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"blsPublicKey\",\"type\":\"bytes\"}],\"name\":\"updateValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"voters\",\"type\":\"address[]\"}],\"name\":\"updateVoters\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"vote\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/consensus/ConsensusV1.sol\":\"ConsensusV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/consensus/ConsensusV1.sol\":{\"keccak256\":\"0xf46c47adfacce9f204df2223af8b3cde47b9fdcaa372d67fdd739cb6ec096733\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://15318c1cdb08120eab84d5d1f6fe997749e843d0b6487f8ae58eaf189dafd27e\",\"dweb:/ipfs/QmbwYcnDQBG3NwBpUHvjGWPLuNYXhPxjitowEFjQk9BVqg\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.27+commit.40a35a09" }, "language": "Solidity", @@ -616,13 +616,13 @@ "name": "getActiveValidators", "outputs": [ { - "internalType": "struct Validator[]", + "internalType": "struct ConsensusV1.Validator[]", "name": "", "type": "tuple[]", "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { - "internalType": "struct ValidatorData", + "internalType": "struct ConsensusV1.ValidatorData", "name": "data", "type": "tuple", "components": [ @@ -643,13 +643,13 @@ "name": "getAllValidators", "outputs": [ { - "internalType": "struct Validator[]", + "internalType": "struct ConsensusV1.Validator[]", "name": "", "type": "tuple[]", "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { - "internalType": "struct ValidatorData", + "internalType": "struct ConsensusV1.ValidatorData", "name": "data", "type": "tuple", "components": [ @@ -673,13 +673,13 @@ "name": "getRounds", "outputs": [ { - "internalType": "struct Round[]", + "internalType": "struct ConsensusV1.Round[]", "name": "", "type": "tuple[]", "components": [ { "internalType": "uint256", "name": "round", "type": "uint256" }, { - "internalType": "struct RoundValidator[]", + "internalType": "struct ConsensusV1.RoundValidator[]", "name": "validators", "type": "tuple[]", "components": [ @@ -705,13 +705,13 @@ "name": "getValidator", "outputs": [ { - "internalType": "struct Validator", + "internalType": "struct ConsensusV1.Validator", "name": "", "type": "tuple", "components": [ { "internalType": "address", "name": "addr", "type": "address" }, { - "internalType": "struct ValidatorData", + "internalType": "struct ConsensusV1.ValidatorData", "name": "data", "type": "tuple", "components": [ @@ -735,7 +735,7 @@ "name": "getVotes", "outputs": [ { - "internalType": "struct VoteResult[]", + "internalType": "struct ConsensusV1.VoteResult[]", "name": "", "type": "tuple[]", "components": [ @@ -971,10 +971,10 @@ "license": "MIT" }, "src/consensus/ConsensusV1.sol": { - "keccak256": "0x0c3bad1c1d75d987b6ee19e7b4828959a5f30bb3c527882b2e34a9efb577ef5f", + "keccak256": "0xf46c47adfacce9f204df2223af8b3cde47b9fdcaa372d67fdd739cb6ec096733", "urls": [ - "bzz-raw://8e82fee7b503264fed7e7dd40cadcec31ebd5b86e9153efe21bfbb349a6fe26a", - "dweb:/ipfs/QmTwjZmkVfcxXTTFadXLzGpdxpmCCKMhzTBduhSmW5h88m" + "bzz-raw://15318c1cdb08120eab84d5d1f6fe997749e843d0b6487f8ae58eaf189dafd27e", + "dweb:/ipfs/QmbwYcnDQBG3NwBpUHvjGWPLuNYXhPxjitowEFjQk9BVqg" ], "license": "GNU GENERAL PUBLIC LICENSE" } diff --git a/packages/evm-contracts/source/abis/MultiPayment.json b/packages/evm-contracts/source/abis/MultiPayment.json index 3f57d5f65..3a8237d78 100644 --- a/packages/evm-contracts/source/abis/MultiPayment.json +++ b/packages/evm-contracts/source/abis/MultiPayment.json @@ -15,17 +15,17 @@ { "type": "error", "name": "RecipientsAndAmountsMismatch", "inputs": [] } ], "bytecode": { - "object": "0x6080604052348015600e575f5ffd5b506102c98061001c5f395ff3fe60806040526004361061001d575f3560e01c8063084ce70814610021575b5f5ffd5b61003461002f3660046101c1565b610036565b005b828114610056576040516366d5293b60e11b815260040160405180910390fd5b5f805b8281101561008f578383828181106100735761007361022d565b90506020020135826100859190610241565b9150600101610059565b508034146100b057604051632a9ffab760e21b815260040160405180910390fd5b5f5b84811015610171575f8686838181106100cd576100cd61022d565b90506020020160208101906100e29190610266565b6001600160a01b03168585848181106100fd576100fd61022d565b905060200201356040515f6040518083038185875af1925050503d805f8114610141576040519150601f19603f3d011682016040523d82523d5f602084013e610146565b606091505b505090508061016857604051630dcf35db60e41b815260040160405180910390fd5b506001016100b2565b505050505050565b5f5f83601f840112610189575f5ffd5b50813567ffffffffffffffff8111156101a0575f5ffd5b6020830191508360208260051b85010111156101ba575f5ffd5b9250929050565b5f5f5f5f604085870312156101d4575f5ffd5b843567ffffffffffffffff8111156101ea575f5ffd5b6101f687828801610179565b909550935050602085013567ffffffffffffffff811115610215575f5ffd5b61022187828801610179565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561026057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610276575f5ffd5b81356001600160a01b038116811461028c575f5ffd5b939250505056fea2646970667358221220ec4bbfa12830c55f441490d2b67f3e926f82b1bd605044cbbc4d38711a4237cc64736f6c634300081b0033", - "sourceMap": "169:736:23:-:0;;;;;;;;;;;;;;;;;;;", + "object": "0x6080604052348015600e575f5ffd5b506102c98061001c5f395ff3fe60806040526004361061001d575f3560e01c8063084ce70814610021575b5f5ffd5b61003461002f3660046101c1565b610036565b005b828114610056576040516366d5293b60e11b815260040160405180910390fd5b5f805b8281101561008f578383828181106100735761007361022d565b90506020020135826100859190610241565b9150600101610059565b508034146100b057604051632a9ffab760e21b815260040160405180910390fd5b5f5b84811015610171575f8686838181106100cd576100cd61022d565b90506020020160208101906100e29190610266565b6001600160a01b03168585848181106100fd576100fd61022d565b905060200201356040515f6040518083038185875af1925050503d805f8114610141576040519150601f19603f3d011682016040523d82523d5f602084013e610146565b606091505b505090508061016857604051630dcf35db60e41b815260040160405180910390fd5b506001016100b2565b505050505050565b5f5f83601f840112610189575f5ffd5b50813567ffffffffffffffff8111156101a0575f5ffd5b6020830191508360208260051b85010111156101ba575f5ffd5b9250929050565b5f5f5f5f604085870312156101d4575f5ffd5b843567ffffffffffffffff8111156101ea575f5ffd5b6101f687828801610179565b909550935050602085013567ffffffffffffffff811115610215575f5ffd5b61022187828801610179565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561026057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610276575f5ffd5b81356001600160a01b038116811461028c575f5ffd5b939250505056fea2646970667358221220bfee9113d4628767f3e4ea5baeb21f9c3bd88ea4c440d0a915dae090d37cd9a664736f6c634300081b0033", + "sourceMap": "81:836:23:-:0;;;;;;;;;;;;;;;;;;;", "linkReferences": {} }, "deployedBytecode": { - "object": "0x60806040526004361061001d575f3560e01c8063084ce70814610021575b5f5ffd5b61003461002f3660046101c1565b610036565b005b828114610056576040516366d5293b60e11b815260040160405180910390fd5b5f805b8281101561008f578383828181106100735761007361022d565b90506020020135826100859190610241565b9150600101610059565b508034146100b057604051632a9ffab760e21b815260040160405180910390fd5b5f5b84811015610171575f8686838181106100cd576100cd61022d565b90506020020160208101906100e29190610266565b6001600160a01b03168585848181106100fd576100fd61022d565b905060200201356040515f6040518083038185875af1925050503d805f8114610141576040519150601f19603f3d011682016040523d82523d5f602084013e610146565b606091505b505090508061016857604051630dcf35db60e41b815260040160405180910390fd5b506001016100b2565b505050505050565b5f5f83601f840112610189575f5ffd5b50813567ffffffffffffffff8111156101a0575f5ffd5b6020830191508360208260051b85010111156101ba575f5ffd5b9250929050565b5f5f5f5f604085870312156101d4575f5ffd5b843567ffffffffffffffff8111156101ea575f5ffd5b6101f687828801610179565b909550935050602085013567ffffffffffffffff811115610215575f5ffd5b61022187828801610179565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561026057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610276575f5ffd5b81356001600160a01b038116811461028c575f5ffd5b939250505056fea2646970667358221220ec4bbfa12830c55f441490d2b67f3e926f82b1bd605044cbbc4d38711a4237cc64736f6c634300081b0033", - "sourceMap": "169:736:23:-:0;;;;;;;;;;;;;;;;;;;;;197:706;;;;;;:::i;:::-;;:::i;:::-;;;306:35;;;302:103;;364:30;;-1:-1:-1;;;364:30:23;;;;;;;;;;;302:103;480:13;;507:89;527:18;;;507:89;;;575:7;;583:1;575:10;;;;;;;:::i;:::-;;;;;;;566:19;;;;;:::i;:::-;;-1:-1:-1;547:3:23;;507:89;;;;622:5;609:9;:18;605:70;;650:14;;-1:-1:-1;;;650:14:23;;;;;;;;;;;605:70;690:9;685:212;705:21;;;685:212;;;748:9;762:10;;773:1;762:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;762:18:23;788:7;;796:1;788:10;;;;;;;:::i;:::-;;;;;;;762:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;747:56;;;822:4;817:70;;853:19;;-1:-1:-1;;;853:19:23;;;;;;;;;;;817:70;-1:-1:-1;728:3:23;;685:212;;;;292:611;197:706;;;;:::o;14:375:25:-;85:8;95:6;149:3;142:4;134:6;130:17;126:27;116:55;;167:1;164;157:12;116:55;-1:-1:-1;190:20:25;;233:18;222:30;;219:50;;;265:1;262;255:12;219:50;302:4;294:6;290:17;278:29;;362:3;355:4;345:6;342:1;338:14;330:6;326:27;322:38;319:47;316:67;;;379:1;376;369:12;316:67;14:375;;;;;:::o;394:792::-;524:6;532;540;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;657:9;644:23;690:18;682:6;679:30;676:50;;;722:1;719;712:12;676:50;761:78;831:7;822:6;811:9;807:22;761:78;:::i;:::-;858:8;;-1:-1:-1;735:104:25;-1:-1:-1;;946:2:25;931:18;;918:32;975:18;962:32;;959:52;;;1007:1;1004;997:12;959:52;1046:80;1118:7;1107:8;1096:9;1092:24;1046:80;:::i;:::-;394:792;;;;-1:-1:-1;1145:8:25;-1:-1:-1;;;;394:792:25:o;1191:127::-;1252:10;1247:3;1243:20;1240:1;1233:31;1283:4;1280:1;1273:15;1307:4;1304:1;1297:15;1323:222;1388:9;;;1409:10;;;1406:133;;;1461:10;1456:3;1452:20;1449:1;1442:31;1496:4;1493:1;1486:15;1524:4;1521:1;1514:15;1406:133;1323:222;;;;:::o;1550:294::-;1617:6;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1712:23;;-1:-1:-1;;;;;1764:31:25;;1754:42;;1744:70;;1810:1;1807;1800:12;1744:70;1833:5;1550:294;-1:-1:-1;;;1550:294:25:o", + "object": "0x60806040526004361061001d575f3560e01c8063084ce70814610021575b5f5ffd5b61003461002f3660046101c1565b610036565b005b828114610056576040516366d5293b60e11b815260040160405180910390fd5b5f805b8281101561008f578383828181106100735761007361022d565b90506020020135826100859190610241565b9150600101610059565b508034146100b057604051632a9ffab760e21b815260040160405180910390fd5b5f5b84811015610171575f8686838181106100cd576100cd61022d565b90506020020160208101906100e29190610266565b6001600160a01b03168585848181106100fd576100fd61022d565b905060200201356040515f6040518083038185875af1925050503d805f8114610141576040519150601f19603f3d011682016040523d82523d5f602084013e610146565b606091505b505090508061016857604051630dcf35db60e41b815260040160405180910390fd5b506001016100b2565b505050505050565b5f5f83601f840112610189575f5ffd5b50813567ffffffffffffffff8111156101a0575f5ffd5b6020830191508360208260051b85010111156101ba575f5ffd5b9250929050565b5f5f5f5f604085870312156101d4575f5ffd5b843567ffffffffffffffff8111156101ea575f5ffd5b6101f687828801610179565b909550935050602085013567ffffffffffffffff811115610215575f5ffd5b61022187828801610179565b95989497509550505050565b634e487b7160e01b5f52603260045260245ffd5b8082018082111561026057634e487b7160e01b5f52601160045260245ffd5b92915050565b5f60208284031215610276575f5ffd5b81356001600160a01b038116811461028c575f5ffd5b939250505056fea2646970667358221220bfee9113d4628767f3e4ea5baeb21f9c3bd88ea4c440d0a915dae090d37cd9a664736f6c634300081b0033", + "sourceMap": "81:836:23:-:0;;;;;;;;;;;;;;;;;;;;;209:706;;;;;;:::i;:::-;;:::i;:::-;;;318:35;;;314:103;;376:30;;-1:-1:-1;;;376:30:23;;;;;;;;;;;314:103;492:13;;519:89;539:18;;;519:89;;;587:7;;595:1;587:10;;;;;;;:::i;:::-;;;;;;;578:19;;;;;:::i;:::-;;-1:-1:-1;559:3:23;;519:89;;;;634:5;621:9;:18;617:70;;662:14;;-1:-1:-1;;;662:14:23;;;;;;;;;;;617:70;702:9;697:212;717:21;;;697:212;;;760:9;774:10;;785:1;774:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;774:18:23;800:7;;808:1;800:10;;;;;;;:::i;:::-;;;;;;;774:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;759:56;;;834:4;829:70;;865:19;;-1:-1:-1;;;865:19:23;;;;;;;;;;;829:70;-1:-1:-1;740:3:23;;697:212;;;;304:611;209:706;;;;:::o;14:375:25:-;85:8;95:6;149:3;142:4;134:6;130:17;126:27;116:55;;167:1;164;157:12;116:55;-1:-1:-1;190:20:25;;233:18;222:30;;219:50;;;265:1;262;255:12;219:50;302:4;294:6;290:17;278:29;;362:3;355:4;345:6;342:1;338:14;330:6;326:27;322:38;319:47;316:67;;;379:1;376;369:12;316:67;14:375;;;;;:::o;394:792::-;524:6;532;540;548;601:2;589:9;580:7;576:23;572:32;569:52;;;617:1;614;607:12;569:52;657:9;644:23;690:18;682:6;679:30;676:50;;;722:1;719;712:12;676:50;761:78;831:7;822:6;811:9;807:22;761:78;:::i;:::-;858:8;;-1:-1:-1;735:104:25;-1:-1:-1;;946:2:25;931:18;;918:32;975:18;962:32;;959:52;;;1007:1;1004;997:12;959:52;1046:80;1118:7;1107:8;1096:9;1092:24;1046:80;:::i;:::-;394:792;;;;-1:-1:-1;1145:8:25;-1:-1:-1;;;;394:792:25:o;1191:127::-;1252:10;1247:3;1243:20;1240:1;1233:31;1283:4;1280:1;1273:15;1307:4;1304:1;1297:15;1323:222;1388:9;;;1409:10;;;1406:133;;;1461:10;1456:3;1452:20;1449:1;1442:31;1496:4;1493:1;1486:15;1524:4;1521:1;1514:15;1406:133;1323:222;;;;:::o;1550:294::-;1617:6;1670:2;1658:9;1649:7;1645:23;1641:32;1638:52;;;1686:1;1683;1676:12;1638:52;1712:23;;-1:-1:-1;;;;;1764:31:25;;1754:42;;1744:70;;1810:1;1807;1800:12;1744:70;1833:5;1550:294;-1:-1:-1;;;1550:294:25:o", "linkReferences": {} }, "methodIdentifiers": { "pay(address[],uint256[])": "084ce708" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedToSendEther\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RecipientsAndAmountsMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/multi-payment/MultiPayment.sol\":\"MultiPayment\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"src/multi-payment/MultiPayment.sol\":{\"keccak256\":\"0x6233972e08da9b5d901f82060bf1f6bf6130906e9728ab07522c9dfcca25cfe7\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://80aedcdcac487133df82d5cc7e31f360a650ab16be14a8e5a87741756ff2e287\",\"dweb:/ipfs/QmVzcJa2wzuoZWnKBytWrhaLvaKJq8K1B7YdHWhDd4LVca\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"FailedToSendEther\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidValue\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"RecipientsAndAmountsMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address payable[]\",\"name\":\"recipients\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"}],\"name\":\"pay\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"kind\":\"dev\",\"methods\":{},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/multi-payment/MultiPayment.sol\":\"MultiPayment\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"src/multi-payment/MultiPayment.sol\":{\"keccak256\":\"0x804a5823ffdb1866bc5f42a0fe3688c8e153da92e279c7b79aa3d73472a1ce35\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://43df2e2ee0c0a76dd4ee8bd6cc81d65c80fb1aaada5e925d129a91de434d2c52\",\"dweb:/ipfs/QmRj4GTC5R6QTcaBxmghrH3ABuDXXwvHpi4yYjd1e8VduW\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.27+commit.40a35a09" }, "language": "Solidity", @@ -70,10 +70,10 @@ }, "sources": { "src/multi-payment/MultiPayment.sol": { - "keccak256": "0x6233972e08da9b5d901f82060bf1f6bf6130906e9728ab07522c9dfcca25cfe7", + "keccak256": "0x804a5823ffdb1866bc5f42a0fe3688c8e153da92e279c7b79aa3d73472a1ce35", "urls": [ - "bzz-raw://80aedcdcac487133df82d5cc7e31f360a650ab16be14a8e5a87741756ff2e287", - "dweb:/ipfs/QmVzcJa2wzuoZWnKBytWrhaLvaKJq8K1B7YdHWhDd4LVca" + "bzz-raw://43df2e2ee0c0a76dd4ee8bd6cc81d65c80fb1aaada5e925d129a91de434d2c52", + "dweb:/ipfs/QmRj4GTC5R6QTcaBxmghrH3ABuDXXwvHpi4yYjd1e8VduW" ], "license": "GNU GENERAL PUBLIC LICENSE" } diff --git a/packages/evm-contracts/source/abis/UsernamesV1.json b/packages/evm-contracts/source/abis/UsernamesV1.json index 9295cdd75..686fc2914 100644 --- a/packages/evm-contracts/source/abis/UsernamesV1.json +++ b/packages/evm-contracts/source/abis/UsernamesV1.json @@ -32,7 +32,7 @@ { "name": "", "type": "tuple[]", - "internalType": "struct User[]", + "internalType": "struct UsernamesV1.User[]", "components": [ { "name": "addr", "type": "address", "internalType": "address" }, { "name": "username", "type": "string", "internalType": "string" } @@ -184,13 +184,13 @@ { "type": "error", "name": "UsernameNotRegistered", "inputs": [] } ], "bytecode": { - "object": "0x60a0604052306080523480156012575f5ffd5b5060805161186b6100395f395f8181610d7c01528181610da50152610ee4015261186b5ff3fe6080604052600436106100e4575f3560e01c80638129fc1c11610087578063e5abdcef11610057578063e5abdcef14610285578063ebed6dab146102a4578063f2fde38b146102b8578063f5ab196e146102d7575f5ffd5b80638129fc1c146101cf5780638da5cb5b146101e3578063ad3cb1cc14610229578063ce43c03214610266575f5ffd5b806352ac2091116100c257806352ac20911461015057806352d1902d1461018657806354fd4d50146101a8578063715018a6146101bb575f5ffd5b8063117720be146100e857806336a941341461011c5780634f1ef2861461013d575b5f5ffd5b3480156100f3575f5ffd5b50610107610102366004611313565b610303565b60405190151581526020015b60405180910390f35b348015610127575f5ffd5b5061013b610136366004611313565b610313565b005b61013b61014b366004611368565b610349565b34801561015b575f5ffd5b5061010761016a366004611313565b80516020918201205f9081526001909152604090205460ff1690565b348015610191575f5ffd5b5061019a610364565b604051908152602001610113565b3480156101b3575f5ffd5b50600161019a565b3480156101c6575f5ffd5b5061013b61037f565b3480156101da575f5ffd5b5061013b610392565b3480156101ee575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610113565b348015610234575f5ffd5b50610259604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101139190611413565b348015610271575f5ffd5b50610259610280366004611425565b6104a0565b348015610290575f5ffd5b5061013b61029f36600461143e565b610549565b3480156102af575f5ffd5b5061013b610592565b3480156102c3575f5ffd5b5061013b6102d2366004611425565b6106e9565b3480156102e2575f5ffd5b506102f66102f136600461147f565b610728565b60405161011391906114f0565b5f61030d826109eb565b92915050565b8061031d816109eb565b61033a57604051630a1de65160e31b815260040160405180910390fd5b610345338383610bfc565b5050565b610351610d71565b61035a82610e15565b6103458282610e1d565b5f61036d610ed9565b505f5160206118165f395f51905f5290565b610387610f22565b6103905f610f7d565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d75750825b90505f8267ffffffffffffffff1660011480156103f35750303b155b905081158015610401575080155b1561041f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044957845460ff60401b1916600160401b1785555b61045233610fed565b831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050565b6001600160a01b0381165f9081526020819052604090208054606091906104c690611573565b80601f01602080910402602001604051908101604052809291908181526020018280546104f290611573565b801561053d5780601f106105145761010080835404028352916020019161053d565b820191905f5260205f20905b81548152906001019060200180831161052057829003601f168201915b50505050509050919050565b610551610f22565b8051819060011180610564575060148151115b1561058257604051630a1de65160e31b815260040160405180910390fd5b61058d838383610bfc565b505050565b335f90815260208190526040812080546105ab90611573565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611573565b80156106225780601f106105f957610100808354040283529160200191610622565b820191905f5260205f20905b81548152906001019060200180831161060557829003601f168201915b505050505090505f815111156106cd57335f908152602081905260408082209051600191839161065291906115ab565b604080519182900390912082526020808301939093529081015f908120805460ff19169415159490941790935533835290829052812061069191611220565b7ff5a79d28213d53340730f0c5a952f4809e33db20cbe21a2a0b5fa7d77fa107b333826040516106c292919061161c565b60405180910390a150565b6040516341c5396760e01b815260040160405180910390fd5b50565b6106f1610f22565b6001600160a01b03811661071f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106e681610f7d565b60605f8267ffffffffffffffff8111156107445761074461126a565b60405190808252806020026020018201604052801561078957816020015b604080518082019091525f8152606060208201528152602001906001900390816107625790505b5090505f805b84811015610935575f5f8787848181106107ab576107ab61163f565b90506020020160208101906107c09190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f2080546107ea90611573565b15905061092d57604051806040016040528087878481811061080e5761080e61163f565b90506020020160208101906108239190611425565b6001600160a01b031681526020015f5f8989868181106108455761084561163f565b905060200201602081019061085a9190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f20805461088490611573565b80601f01602080910402602001604051908101604052809291908181526020018280546108b090611573565b80156108fb5780601f106108d2576101008083540402835291602001916108fb565b820191905f5260205f20905b8154815290600101906020018083116108de57829003601f168201915b505050505081525083838061090f90611667565b9450815181106109215761092161163f565b60200260200101819052505b60010161078f565b505f8167ffffffffffffffff8111156109505761095061126a565b60405190808252806020026020018201604052801561099557816020015b604080518082019091525f81526060602082015281526020019060019003908161096e5790505b5090505f5b828110156109e1578381815181106109b4576109b461163f565b60200260200101518282815181106109ce576109ce61163f565b602090810291909101015260010161099a565b5095945050505050565b5f6001825110806109fd575060148251115b15610a0957505f919050565b815f81518110610a1b57610a1b61163f565b6020910101516001600160f81b031916605f60f81b1480610a6d57508160018351610a46919061167f565b81518110610a5657610a5661163f565b6020910101516001600160f81b031916605f60f81b145b15610a7957505f919050565b5f5b8251811015610bf357603060f81b838281518110610a9b57610a9b61163f565b01602001516001600160f81b03191610801590610adc5750603960f81b838281518110610aca57610aca61163f565b01602001516001600160f81b03191611155b158015610b3e5750606160f81b838281518110610afb57610afb61163f565b01602001516001600160f81b03191610801590610b3c5750607a60f81b838281518110610b2a57610b2a61163f565b01602001516001600160f81b03191611155b155b8015610b6f5750828181518110610b5757610b5761163f565b6020910101516001600160f81b031916605f60f81b14155b15610b7c57505f92915050565b828181518110610b8e57610b8e61163f565b6020910101516001600160f81b031916605f60f81b148015610bde575082610bb7826001611692565b81518110610bc757610bc761163f565b6020910101516001600160f81b031916605f60f81b145b15610beb57505f92915050565b600101610a7b565b50600192915050565b80516020808301919091205f818152600190925260409091205460ff1615610c375760405163506517a760e11b815260040160405180910390fd5b6001600160a01b0384165f9081526020819052604081208054610c5990611573565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590611573565b8015610cd05780601f10610ca757610100808354040283529160200191610cd0565b820191905f5260205f20905b815481529060010190602001808311610cb357829003601f168201915b505050505090505f81511115610d015780516020808301919091205f908152600190915260409020805460ff191690555b6001600160a01b0385165f908152602081905260409020610d2285826116e9565b505f82815260016020819052604091829020805460ff19169091179055517fdc393f1f31882fea068a12acfed8ed6e9f7e88a6ed213355b5afb78ad76a704590610490908790879085906117a4565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610df757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610deb5f5160206118165f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156103905760405163703e46dd60e11b815260040160405180910390fd5b6106e6610f22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e74918101906117e3565b60015b610e9f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610716565b5f5160206118165f395f51905f528114610ecf57604051632a87526960e21b815260048101829052602401610716565b61058d8383610ffe565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103905760405163703e46dd60e11b815260040160405180910390fd5b33610f547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103905760405163118cdaa760e01b8152336004820152602401610716565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610ff5611053565b6106e68161109c565b611007826110a4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561104b5761058d8282611107565b610345611179565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661039057604051631afcd79f60e31b815260040160405180910390fd5b6106f1611053565b806001600160a01b03163b5f036110d957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610716565b5f5160206118165f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161112391906117fa565b5f60405180830381855af49150503d805f811461115b576040519150601f19603f3d011682016040523d82523d5f602084013e611160565b606091505b5091509150611170858383611198565b95945050505050565b34156103905760405163b398979f60e01b815260040160405180910390fd5b6060826111ad576111a8826111f7565b6111f0565b81511580156111c457506001600160a01b0384163b155b156111ed57604051639996b31560e01b81526001600160a01b0385166004820152602401610716565b50805b9392505050565b8051156112075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461122c90611573565b5f825580601f1061123b575050565b601f0160209004905f5260205f20908101906106e691905b80821115611266575f8155600101611253565b5090565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156112985761129861126a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156112c7576112c761126a565b6040528381529050808284018510156112de575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f830112611304575f5ffd5b6111f08383356020850161127e565b5f60208284031215611323575f5ffd5b813567ffffffffffffffff811115611339575f5ffd5b611345848285016112f5565b949350505050565b80356001600160a01b0381168114611363575f5ffd5b919050565b5f5f60408385031215611379575f5ffd5b6113828361134d565b9150602083013567ffffffffffffffff81111561139d575f5ffd5b8301601f810185136113ad575f5ffd5b6113bc8582356020840161127e565b9150509250929050565b5f5b838110156113e05781810151838201526020016113c8565b50505f910152565b5f81518084526113ff8160208601602086016113c6565b601f01601f19169290920160200192915050565b602081525f6111f060208301846113e8565b5f60208284031215611435575f5ffd5b6111f08261134d565b5f5f6040838503121561144f575f5ffd5b6114588361134d565b9150602083013567ffffffffffffffff811115611473575f5ffd5b6113bc858286016112f5565b5f5f60208385031215611490575f5ffd5b823567ffffffffffffffff8111156114a6575f5ffd5b8301601f810185136114b6575f5ffd5b803567ffffffffffffffff8111156114cc575f5ffd5b8560208260051b84010111156114e0575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561156757868503603f19018452815180516001600160a01b03168652602090810151604091870182905290611551908701826113e8565b9550506020938401939190910190600101611516565b50929695505050505050565b600181811c9082168061158757607f821691505b6020821081036115a557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f83546115b881611573565b6001821680156115cf57600181146115e457611611565b60ff1983168652811515820286019350611611565b865f5260205f205f5b83811015611609578154888201526001909101906020016115ed565b505081860193505b509195945050505050565b6001600160a01b03831681526040602082018190525f90611345908301846113e8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161167857611678611653565b5060010190565b8181038181111561030d5761030d611653565b8082018082111561030d5761030d611653565b601f82111561058d57805f5260205f20601f840160051c810160208510156116ca5750805b601f840160051c820191505b81811015610499575f81556001016116d6565b815167ffffffffffffffff8111156117035761170361126a565b611717816117118454611573565b846116a5565b6020601f821160018114611749575f83156117325750848201515b5f19600385901b1c1916600184901b178455610499565b5f84815260208120601f198516915b828110156117785787850151825560209485019460019092019101611758565b508482101561179557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526060602082018190525f906117c7908301856113e8565b82810360408401526117d981856113e8565b9695505050505050565b5f602082840312156117f3575f5ffd5b5051919050565b5f825161180b8184602087016113c6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122010ce56e2426e70ab731e9d8fc46d4451352ab7986e5cfd3f725c82abbb3222bc64736f6c634300081b0033", - "sourceMap": "560:4704:37:-:0;;;1171:4:25;1128:48;;560:4704:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", + "object": "0x60a0604052306080523480156012575f5ffd5b5060805161186b6100395f395f8181610d7c01528181610da50152610ee4015261186b5ff3fe6080604052600436106100e4575f3560e01c80638129fc1c11610087578063e5abdcef11610057578063e5abdcef14610285578063ebed6dab146102a4578063f2fde38b146102b8578063f5ab196e146102d7575f5ffd5b80638129fc1c146101cf5780638da5cb5b146101e3578063ad3cb1cc14610229578063ce43c03214610266575f5ffd5b806352ac2091116100c257806352ac20911461015057806352d1902d1461018657806354fd4d50146101a8578063715018a6146101bb575f5ffd5b8063117720be146100e857806336a941341461011c5780634f1ef2861461013d575b5f5ffd5b3480156100f3575f5ffd5b50610107610102366004611313565b610303565b60405190151581526020015b60405180910390f35b348015610127575f5ffd5b5061013b610136366004611313565b610313565b005b61013b61014b366004611368565b610349565b34801561015b575f5ffd5b5061010761016a366004611313565b80516020918201205f9081526001909152604090205460ff1690565b348015610191575f5ffd5b5061019a610364565b604051908152602001610113565b3480156101b3575f5ffd5b50600161019a565b3480156101c6575f5ffd5b5061013b61037f565b3480156101da575f5ffd5b5061013b610392565b3480156101ee575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610113565b348015610234575f5ffd5b50610259604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101139190611413565b348015610271575f5ffd5b50610259610280366004611425565b6104a0565b348015610290575f5ffd5b5061013b61029f36600461143e565b610549565b3480156102af575f5ffd5b5061013b610592565b3480156102c3575f5ffd5b5061013b6102d2366004611425565b6106e9565b3480156102e2575f5ffd5b506102f66102f136600461147f565b610728565b60405161011391906114f0565b5f61030d826109eb565b92915050565b8061031d816109eb565b61033a57604051630a1de65160e31b815260040160405180910390fd5b610345338383610bfc565b5050565b610351610d71565b61035a82610e15565b6103458282610e1d565b5f61036d610ed9565b505f5160206118165f395f51905f5290565b610387610f22565b6103905f610f7d565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d75750825b90505f8267ffffffffffffffff1660011480156103f35750303b155b905081158015610401575080155b1561041f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044957845460ff60401b1916600160401b1785555b61045233610fed565b831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050565b6001600160a01b0381165f9081526020819052604090208054606091906104c690611573565b80601f01602080910402602001604051908101604052809291908181526020018280546104f290611573565b801561053d5780601f106105145761010080835404028352916020019161053d565b820191905f5260205f20905b81548152906001019060200180831161052057829003601f168201915b50505050509050919050565b610551610f22565b8051819060011180610564575060148151115b1561058257604051630a1de65160e31b815260040160405180910390fd5b61058d838383610bfc565b505050565b335f90815260208190526040812080546105ab90611573565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611573565b80156106225780601f106105f957610100808354040283529160200191610622565b820191905f5260205f20905b81548152906001019060200180831161060557829003601f168201915b505050505090505f815111156106cd57335f908152602081905260408082209051600191839161065291906115ab565b604080519182900390912082526020808301939093529081015f908120805460ff19169415159490941790935533835290829052812061069191611220565b7ff5a79d28213d53340730f0c5a952f4809e33db20cbe21a2a0b5fa7d77fa107b333826040516106c292919061161c565b60405180910390a150565b6040516341c5396760e01b815260040160405180910390fd5b50565b6106f1610f22565b6001600160a01b03811661071f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106e681610f7d565b60605f8267ffffffffffffffff8111156107445761074461126a565b60405190808252806020026020018201604052801561078957816020015b604080518082019091525f8152606060208201528152602001906001900390816107625790505b5090505f805b84811015610935575f5f8787848181106107ab576107ab61163f565b90506020020160208101906107c09190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f2080546107ea90611573565b15905061092d57604051806040016040528087878481811061080e5761080e61163f565b90506020020160208101906108239190611425565b6001600160a01b031681526020015f5f8989868181106108455761084561163f565b905060200201602081019061085a9190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f20805461088490611573565b80601f01602080910402602001604051908101604052809291908181526020018280546108b090611573565b80156108fb5780601f106108d2576101008083540402835291602001916108fb565b820191905f5260205f20905b8154815290600101906020018083116108de57829003601f168201915b505050505081525083838061090f90611667565b9450815181106109215761092161163f565b60200260200101819052505b60010161078f565b505f8167ffffffffffffffff8111156109505761095061126a565b60405190808252806020026020018201604052801561099557816020015b604080518082019091525f81526060602082015281526020019060019003908161096e5790505b5090505f5b828110156109e1578381815181106109b4576109b461163f565b60200260200101518282815181106109ce576109ce61163f565b602090810291909101015260010161099a565b5095945050505050565b5f6001825110806109fd575060148251115b15610a0957505f919050565b815f81518110610a1b57610a1b61163f565b6020910101516001600160f81b031916605f60f81b1480610a6d57508160018351610a46919061167f565b81518110610a5657610a5661163f565b6020910101516001600160f81b031916605f60f81b145b15610a7957505f919050565b5f5b8251811015610bf357603060f81b838281518110610a9b57610a9b61163f565b01602001516001600160f81b03191610801590610adc5750603960f81b838281518110610aca57610aca61163f565b01602001516001600160f81b03191611155b158015610b3e5750606160f81b838281518110610afb57610afb61163f565b01602001516001600160f81b03191610801590610b3c5750607a60f81b838281518110610b2a57610b2a61163f565b01602001516001600160f81b03191611155b155b8015610b6f5750828181518110610b5757610b5761163f565b6020910101516001600160f81b031916605f60f81b14155b15610b7c57505f92915050565b828181518110610b8e57610b8e61163f565b6020910101516001600160f81b031916605f60f81b148015610bde575082610bb7826001611692565b81518110610bc757610bc761163f565b6020910101516001600160f81b031916605f60f81b145b15610beb57505f92915050565b600101610a7b565b50600192915050565b80516020808301919091205f818152600190925260409091205460ff1615610c375760405163506517a760e11b815260040160405180910390fd5b6001600160a01b0384165f9081526020819052604081208054610c5990611573565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590611573565b8015610cd05780601f10610ca757610100808354040283529160200191610cd0565b820191905f5260205f20905b815481529060010190602001808311610cb357829003601f168201915b505050505090505f81511115610d015780516020808301919091205f908152600190915260409020805460ff191690555b6001600160a01b0385165f908152602081905260409020610d2285826116e9565b505f82815260016020819052604091829020805460ff19169091179055517fdc393f1f31882fea068a12acfed8ed6e9f7e88a6ed213355b5afb78ad76a704590610490908790879085906117a4565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610df757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610deb5f5160206118165f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156103905760405163703e46dd60e11b815260040160405180910390fd5b6106e6610f22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e74918101906117e3565b60015b610e9f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610716565b5f5160206118165f395f51905f528114610ecf57604051632a87526960e21b815260048101829052602401610716565b61058d8383610ffe565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103905760405163703e46dd60e11b815260040160405180910390fd5b33610f547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103905760405163118cdaa760e01b8152336004820152602401610716565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610ff5611053565b6106e68161109c565b611007826110a4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561104b5761058d8282611107565b610345611179565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661039057604051631afcd79f60e31b815260040160405180910390fd5b6106f1611053565b806001600160a01b03163b5f036110d957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610716565b5f5160206118165f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161112391906117fa565b5f60405180830381855af49150503d805f811461115b576040519150601f19603f3d011682016040523d82523d5f602084013e611160565b606091505b5091509150611170858383611198565b95945050505050565b34156103905760405163b398979f60e01b815260040160405180910390fd5b6060826111ad576111a8826111f7565b6111f0565b81511580156111c457506001600160a01b0384163b155b156111ed57604051639996b31560e01b81526001600160a01b0385166004820152602401610716565b50805b9392505050565b8051156112075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461122c90611573565b5f825580601f1061123b575050565b601f0160209004905f5260205f20908101906106e691905b80821115611266575f8155600101611253565b5090565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156112985761129861126a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156112c7576112c761126a565b6040528381529050808284018510156112de575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f830112611304575f5ffd5b6111f08383356020850161127e565b5f60208284031215611323575f5ffd5b813567ffffffffffffffff811115611339575f5ffd5b611345848285016112f5565b949350505050565b80356001600160a01b0381168114611363575f5ffd5b919050565b5f5f60408385031215611379575f5ffd5b6113828361134d565b9150602083013567ffffffffffffffff81111561139d575f5ffd5b8301601f810185136113ad575f5ffd5b6113bc8582356020840161127e565b9150509250929050565b5f5b838110156113e05781810151838201526020016113c8565b50505f910152565b5f81518084526113ff8160208601602086016113c6565b601f01601f19169290920160200192915050565b602081525f6111f060208301846113e8565b5f60208284031215611435575f5ffd5b6111f08261134d565b5f5f6040838503121561144f575f5ffd5b6114588361134d565b9150602083013567ffffffffffffffff811115611473575f5ffd5b6113bc858286016112f5565b5f5f60208385031215611490575f5ffd5b823567ffffffffffffffff8111156114a6575f5ffd5b8301601f810185136114b6575f5ffd5b803567ffffffffffffffff8111156114cc575f5ffd5b8560208260051b84010111156114e0575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561156757868503603f19018452815180516001600160a01b03168652602090810151604091870182905290611551908701826113e8565b9550506020938401939190910190600101611516565b50929695505050505050565b600181811c9082168061158757607f821691505b6020821081036115a557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f83546115b881611573565b6001821680156115cf57600181146115e457611611565b60ff1983168652811515820286019350611611565b865f5260205f205f5b83811015611609578154888201526001909101906020016115ed565b505081860193505b509195945050505050565b6001600160a01b03831681526040602082018190525f90611345908301846113e8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161167857611678611653565b5060010190565b8181038181111561030d5761030d611653565b8082018082111561030d5761030d611653565b601f82111561058d57805f5260205f20601f840160051c810160208510156116ca5750805b601f840160051c820191505b81811015610499575f81556001016116d6565b815167ffffffffffffffff8111156117035761170361126a565b611717816117118454611573565b846116a5565b6020601f821160018114611749575f83156117325750848201515b5f19600385901b1c1916600184901b178455610499565b5f84815260208120601f198516915b828110156117785787850151825560209485019460019092019101611758565b508482101561179557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526060602082018190525f906117c7908301856113e8565b82810360408401526117d981856113e8565b9695505050505050565b5f602082840312156117f3575f5ffd5b5051919050565b5f825161180b8184602087016113c6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212202cd847cb3edf0b7eef198ed0ae022f99a0d18fa21cb2a945077443915317943b64736f6c634300081b0033", + "sourceMap": "285:5015:37:-:0;;;1171:4:25;1128:48;;285:5015:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;", "linkReferences": {} }, "deployedBytecode": { - "object": "0x6080604052600436106100e4575f3560e01c80638129fc1c11610087578063e5abdcef11610057578063e5abdcef14610285578063ebed6dab146102a4578063f2fde38b146102b8578063f5ab196e146102d7575f5ffd5b80638129fc1c146101cf5780638da5cb5b146101e3578063ad3cb1cc14610229578063ce43c03214610266575f5ffd5b806352ac2091116100c257806352ac20911461015057806352d1902d1461018657806354fd4d50146101a8578063715018a6146101bb575f5ffd5b8063117720be146100e857806336a941341461011c5780634f1ef2861461013d575b5f5ffd5b3480156100f3575f5ffd5b50610107610102366004611313565b610303565b60405190151581526020015b60405180910390f35b348015610127575f5ffd5b5061013b610136366004611313565b610313565b005b61013b61014b366004611368565b610349565b34801561015b575f5ffd5b5061010761016a366004611313565b80516020918201205f9081526001909152604090205460ff1690565b348015610191575f5ffd5b5061019a610364565b604051908152602001610113565b3480156101b3575f5ffd5b50600161019a565b3480156101c6575f5ffd5b5061013b61037f565b3480156101da575f5ffd5b5061013b610392565b3480156101ee575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610113565b348015610234575f5ffd5b50610259604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101139190611413565b348015610271575f5ffd5b50610259610280366004611425565b6104a0565b348015610290575f5ffd5b5061013b61029f36600461143e565b610549565b3480156102af575f5ffd5b5061013b610592565b3480156102c3575f5ffd5b5061013b6102d2366004611425565b6106e9565b3480156102e2575f5ffd5b506102f66102f136600461147f565b610728565b60405161011391906114f0565b5f61030d826109eb565b92915050565b8061031d816109eb565b61033a57604051630a1de65160e31b815260040160405180910390fd5b610345338383610bfc565b5050565b610351610d71565b61035a82610e15565b6103458282610e1d565b5f61036d610ed9565b505f5160206118165f395f51905f5290565b610387610f22565b6103905f610f7d565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d75750825b90505f8267ffffffffffffffff1660011480156103f35750303b155b905081158015610401575080155b1561041f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044957845460ff60401b1916600160401b1785555b61045233610fed565b831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050565b6001600160a01b0381165f9081526020819052604090208054606091906104c690611573565b80601f01602080910402602001604051908101604052809291908181526020018280546104f290611573565b801561053d5780601f106105145761010080835404028352916020019161053d565b820191905f5260205f20905b81548152906001019060200180831161052057829003601f168201915b50505050509050919050565b610551610f22565b8051819060011180610564575060148151115b1561058257604051630a1de65160e31b815260040160405180910390fd5b61058d838383610bfc565b505050565b335f90815260208190526040812080546105ab90611573565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611573565b80156106225780601f106105f957610100808354040283529160200191610622565b820191905f5260205f20905b81548152906001019060200180831161060557829003601f168201915b505050505090505f815111156106cd57335f908152602081905260408082209051600191839161065291906115ab565b604080519182900390912082526020808301939093529081015f908120805460ff19169415159490941790935533835290829052812061069191611220565b7ff5a79d28213d53340730f0c5a952f4809e33db20cbe21a2a0b5fa7d77fa107b333826040516106c292919061161c565b60405180910390a150565b6040516341c5396760e01b815260040160405180910390fd5b50565b6106f1610f22565b6001600160a01b03811661071f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106e681610f7d565b60605f8267ffffffffffffffff8111156107445761074461126a565b60405190808252806020026020018201604052801561078957816020015b604080518082019091525f8152606060208201528152602001906001900390816107625790505b5090505f805b84811015610935575f5f8787848181106107ab576107ab61163f565b90506020020160208101906107c09190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f2080546107ea90611573565b15905061092d57604051806040016040528087878481811061080e5761080e61163f565b90506020020160208101906108239190611425565b6001600160a01b031681526020015f5f8989868181106108455761084561163f565b905060200201602081019061085a9190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f20805461088490611573565b80601f01602080910402602001604051908101604052809291908181526020018280546108b090611573565b80156108fb5780601f106108d2576101008083540402835291602001916108fb565b820191905f5260205f20905b8154815290600101906020018083116108de57829003601f168201915b505050505081525083838061090f90611667565b9450815181106109215761092161163f565b60200260200101819052505b60010161078f565b505f8167ffffffffffffffff8111156109505761095061126a565b60405190808252806020026020018201604052801561099557816020015b604080518082019091525f81526060602082015281526020019060019003908161096e5790505b5090505f5b828110156109e1578381815181106109b4576109b461163f565b60200260200101518282815181106109ce576109ce61163f565b602090810291909101015260010161099a565b5095945050505050565b5f6001825110806109fd575060148251115b15610a0957505f919050565b815f81518110610a1b57610a1b61163f565b6020910101516001600160f81b031916605f60f81b1480610a6d57508160018351610a46919061167f565b81518110610a5657610a5661163f565b6020910101516001600160f81b031916605f60f81b145b15610a7957505f919050565b5f5b8251811015610bf357603060f81b838281518110610a9b57610a9b61163f565b01602001516001600160f81b03191610801590610adc5750603960f81b838281518110610aca57610aca61163f565b01602001516001600160f81b03191611155b158015610b3e5750606160f81b838281518110610afb57610afb61163f565b01602001516001600160f81b03191610801590610b3c5750607a60f81b838281518110610b2a57610b2a61163f565b01602001516001600160f81b03191611155b155b8015610b6f5750828181518110610b5757610b5761163f565b6020910101516001600160f81b031916605f60f81b14155b15610b7c57505f92915050565b828181518110610b8e57610b8e61163f565b6020910101516001600160f81b031916605f60f81b148015610bde575082610bb7826001611692565b81518110610bc757610bc761163f565b6020910101516001600160f81b031916605f60f81b145b15610beb57505f92915050565b600101610a7b565b50600192915050565b80516020808301919091205f818152600190925260409091205460ff1615610c375760405163506517a760e11b815260040160405180910390fd5b6001600160a01b0384165f9081526020819052604081208054610c5990611573565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590611573565b8015610cd05780601f10610ca757610100808354040283529160200191610cd0565b820191905f5260205f20905b815481529060010190602001808311610cb357829003601f168201915b505050505090505f81511115610d015780516020808301919091205f908152600190915260409020805460ff191690555b6001600160a01b0385165f908152602081905260409020610d2285826116e9565b505f82815260016020819052604091829020805460ff19169091179055517fdc393f1f31882fea068a12acfed8ed6e9f7e88a6ed213355b5afb78ad76a704590610490908790879085906117a4565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610df757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610deb5f5160206118165f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156103905760405163703e46dd60e11b815260040160405180910390fd5b6106e6610f22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e74918101906117e3565b60015b610e9f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610716565b5f5160206118165f395f51905f528114610ecf57604051632a87526960e21b815260048101829052602401610716565b61058d8383610ffe565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103905760405163703e46dd60e11b815260040160405180910390fd5b33610f547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103905760405163118cdaa760e01b8152336004820152602401610716565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610ff5611053565b6106e68161109c565b611007826110a4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561104b5761058d8282611107565b610345611179565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661039057604051631afcd79f60e31b815260040160405180910390fd5b6106f1611053565b806001600160a01b03163b5f036110d957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610716565b5f5160206118165f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161112391906117fa565b5f60405180830381855af49150503d805f811461115b576040519150601f19603f3d011682016040523d82523d5f602084013e611160565b606091505b5091509150611170858383611198565b95945050505050565b34156103905760405163b398979f60e01b815260040160405180910390fd5b6060826111ad576111a8826111f7565b6111f0565b81511580156111c457506001600160a01b0384163b155b156111ed57604051639996b31560e01b81526001600160a01b0385166004820152602401610716565b50805b9392505050565b8051156112075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461122c90611573565b5f825580601f1061123b575050565b601f0160209004905f5260205f20908101906106e691905b80821115611266575f8155600101611253565b5090565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156112985761129861126a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156112c7576112c761126a565b6040528381529050808284018510156112de575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f830112611304575f5ffd5b6111f08383356020850161127e565b5f60208284031215611323575f5ffd5b813567ffffffffffffffff811115611339575f5ffd5b611345848285016112f5565b949350505050565b80356001600160a01b0381168114611363575f5ffd5b919050565b5f5f60408385031215611379575f5ffd5b6113828361134d565b9150602083013567ffffffffffffffff81111561139d575f5ffd5b8301601f810185136113ad575f5ffd5b6113bc8582356020840161127e565b9150509250929050565b5f5b838110156113e05781810151838201526020016113c8565b50505f910152565b5f81518084526113ff8160208601602086016113c6565b601f01601f19169290920160200192915050565b602081525f6111f060208301846113e8565b5f60208284031215611435575f5ffd5b6111f08261134d565b5f5f6040838503121561144f575f5ffd5b6114588361134d565b9150602083013567ffffffffffffffff811115611473575f5ffd5b6113bc858286016112f5565b5f5f60208385031215611490575f5ffd5b823567ffffffffffffffff8111156114a6575f5ffd5b8301601f810185136114b6575f5ffd5b803567ffffffffffffffff8111156114cc575f5ffd5b8560208260051b84010111156114e0575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561156757868503603f19018452815180516001600160a01b03168652602090810151604091870182905290611551908701826113e8565b9550506020938401939190910190600101611516565b50929695505050505050565b600181811c9082168061158757607f821691505b6020821081036115a557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f83546115b881611573565b6001821680156115cf57600181146115e457611611565b60ff1983168652811515820286019350611611565b865f5260205f205f5b83811015611609578154888201526001909101906020016115ed565b505081860193505b509195945050505050565b6001600160a01b03831681526040602082018190525f90611345908301846113e8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161167857611678611653565b5060010190565b8181038181111561030d5761030d611653565b8082018082111561030d5761030d611653565b601f82111561058d57805f5260205f20601f840160051c810160208510156116ca5750805b601f840160051c820191505b81811015610499575f81556001016116d6565b815167ffffffffffffffff8111156117035761170361126a565b611717816117118454611573565b846116a5565b6020601f821160018114611749575f83156117325750848201515b5f19600385901b1c1916600184901b178455610499565b5f84815260208120601f198516915b828110156117785787850151825560209485019460019092019101611758565b508482101561179557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526060602082018190525f906117c7908301856113e8565b82810360408401526117d981856113e8565b9695505050505050565b5f602082840312156117f3575f5ffd5b5051919050565b5f825161180b8184602087016113c6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca264697066735822122010ce56e2426e70ab731e9d8fc46d4451352ab7986e5cfd3f725c82abbb3222bc64736f6c634300081b0033", - "sourceMap": "560:4704:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2455:134;;;;;;;;;;-1:-1:-1;2455:134:37;;;;;:::i;:::-;;:::i;:::-;;;1586:14:40;;1579:22;1561:41;;1549:2;1534:18;2455:134:37;;;;;;;;1339:273;;;;;;;;;;-1:-1:-1;1339:273:37;;;;;:::i;:::-;;:::i;:::-;;4161:214:25;;;;;;:::i;:::-;;:::i;2299:150:37:-;;;;;;;;;;-1:-1:-1;2299:150:37;;;;;:::i;:::-;2415:26;;;;;;;2376:4;2399:43;;;:15;:43;;;;;;;;;;2299:150;3708:134:25;;;;;;;;;;;;;:::i;:::-;;;2466:25:40;;;2454:2;2439:18;3708:134:25;2320:177:40;2098:76:37;;;;;;;;;;-1:-1:-1;2166:1:37;2098:76;;3155:101:23;;;;;;;;;;;;;:::i;752:84:37:-;;;;;;;;;;;;;:::i;2441:144:23:-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;2441:144;;-1:-1:-1;;;;;2570:8:23;;;2830:51:40;;2818:2;2803:18;2441:144:23;2684:203:40;1819:58:25;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;2180:113:37:-;;;;;;;;;;-1:-1:-1;2180:113:37;;;;;:::i;:::-;;:::i;975:358::-;;;;;;;;;;-1:-1:-1;975:358:37;;;;;:::i;:::-;;:::i;1618:434::-;;;;;;;;;;;;;:::i;3405:215:23:-;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;2595:621:37:-;;;;;;;;;;-1:-1:-1;2595:621:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2455:134::-;2527:4;2550:32;2572:8;2550:15;:32::i;:::-;2543:39;2455:134;-1:-1:-1;;2455:134:37:o;1339:273::-;1460:8;1484:18;1460:8;1484:15;:18::i;:::-;1479:74;;1525:17;;-1:-1:-1;;;1525:17:37;;;;;;;;;;;1479:74;1563:42;1581:10;1593:8;1603:1;1563:17;:42::i;:::-;1398:214;1339:273;:::o;4161:214:25:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:25;:::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;752:84:37:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;803:26:37::1;818:10;803:14;:26::i;:::-;5070:14:24::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;6020:50:40;;5142:14:24;;6008:2:40;5993:18;5142:14:24;;;;;;;;5066:101;4092:1081;;;;;752:84:37:o;2180:113::-;-1:-1:-1;;;;;2270:16:37;;:10;:16;;;;;;;;;;2263:23;;2238:13;;2270:16;2263:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2180:113;;;:::o;975:358::-;2334:13:23;:11;:13::i;:::-;1200:8:37;;1086;;1211:1:::1;-1:-1:-1::0;1200:12:37;:29:::1;;;1227:2;1216:1;:8;:13;1200:29;1196:84;;;1252:17;;-1:-1:-1::0;;;1252:17:37::1;;;;;;;;;;;1196:84;1290:36;1308:4;1314:8;1324:1;1290:17;:36::i;:::-;1053:280;975:358:::0;;:::o;1618:434::-;1699:10;1663:22;1688;;;;;;;;;;1663:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1791:1;1772:8;1766:22;:26;1762:284;;;1851:10;1868:5;1840:22;;;;;;;;;;;1824:40;;1808:15;;1868:5;;1824:40;;1840:22;1824:40;:::i;:::-;;;;;;;;;;;1808:57;;;;;;;;;;;;;-1:-1:-1;1808:57:37;;;:65;;-1:-1:-1;;1808:65:37;;;;;;;;;;;1905:10;1894:22;;;;;;;;1887:29;;;:::i;:::-;1936:38;1953:10;1965:8;1936:38;;;;;;;:::i;:::-;;;;;;;;1653:399;1618:434::o;1762:284::-;2012:23;;-1:-1:-1;;;2012:23:37;;;;;;;;;;;1762:284;1653:399;1618:434::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;2830:51:40::0;2803:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;2595:621:37:-:0;2670:13;2695:19;2728:9;2717:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2717:28:37;;;;;;;;;;;;;;;-1:-1:-1;2695:50:37;-1:-1:-1;2755:13:37;;2782:214;2802:20;;;2782:214;;;2853:10;:24;2864:9;;2874:1;2864:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2853:24:37;-1:-1:-1;;;;;2853:24:37;;;;;;;;;;;;2847:38;;;;;:::i;:::-;:43;;-1:-1:-1;2843:143:37;;2927:44;;;;;;;;2932:9;;2942:1;2932:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2927:44:37;;;;;2946:10;:24;2957:9;;2967:1;2957:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2946:24:37;-1:-1:-1;;;;;2946:24:37;;;;;;;;;;;;2927:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2910:5;2916:7;;;;;:::i;:::-;;;2910:14;;;;;;;;:::i;:::-;;;;;;:61;;;;2843:143;2824:3;;2782:214;;;;3055:20;3089:5;3078:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3078:17:37;;;;;;;;;;;;;;;-1:-1:-1;3055:40:37;-1:-1:-1;3110:9:37;3105:81;3129:5;3125:1;:9;3105:81;;;3167:5;3173:1;3167:8;;;;;;;;:::i;:::-;;;;;;;3155:6;3162:1;3155:9;;;;;;;;:::i;:::-;;;;;;;;;;:20;3136:3;;3105:81;;;-1:-1:-1;3203:6:37;2595:621;-1:-1:-1;;;;;2595:621:37:o;3505:1108::-;3576:4;3698:1;3680:8;:15;:19;:43;;;;3721:2;3703:8;:15;:20;3680:43;3676:86;;;-1:-1:-1;3746:5:37;;3505:1108;-1:-1:-1;3505:1108:37:o;3676:86::-;3823:8;3832:1;3823:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3823:11:37;-1:-1:-1;;;3823:19:37;;:60;;;3846:8;3873:1;3855:8;:15;:19;;;;:::i;:::-;3846:29;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3846:29:37;-1:-1:-1;;;3846:37:37;3823:60;3819:103;;;-1:-1:-1;3906:5:37;;3505:1108;-1:-1:-1;3505:1108:37:o;3819:103::-;3937:9;3932:653;3956:8;:15;3952:1;:19;3932:653;;;4105:4;4090:19;;:8;4099:1;4090:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4090:11:37;:19;;;;:42;;;4128:4;4113:19;;:8;4122:1;4113:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4113:11:37;:19;;4090:42;4088:45;:121;;;;;4181:4;4166:19;;:8;4175:1;4166:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4166:11:37;:19;;;;:42;;;4204:4;4189:19;;:8;4198:1;4189:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4189:11:37;:19;;4166:42;4164:45;4088:121;:174;;;;;4242:8;4251:1;4242:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4242:11:37;-1:-1:-1;;;4242:19:37;4240:22;4088:174;4067:260;;;-1:-1:-1;4307:5:37;;3505:1108;-1:-1:-1;;3505:1108:37:o;4067:260::-;4482:8;4491:1;4482:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4482:11:37;-1:-1:-1;;;4482:19:37;:46;;;;-1:-1:-1;4505:8:37;4514:5;:1;4518;4514:5;:::i;:::-;4505:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4505:15:37;-1:-1:-1;;;4505:23:37;4482:46;4478:97;;;-1:-1:-1;4555:5:37;;3505:1108;-1:-1:-1;;3505:1108:37:o;4478:97::-;3973:3;;3932:653;;;-1:-1:-1;4602:4:37;;3505:1108;-1:-1:-1;;3505:1108:37:o;4619:643::-;4742:12;;;;;;;;;;4719:20;4768:29;;;:15;:29;;;;;;;;;;4764:82;;;4820:15;;-1:-1:-1;;;4820:15:37;;;;;;;;;;;4764:82;-1:-1:-1;;;;;4889:16:37;;4856:30;4889:16;;;;;;;;;;4856:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4994:1;4967:16;4961:30;:34;4957:147;;;5027:34;;;;;;;;;;5065:5;5011:51;;;:15;:51;;;;;;:59;;-1:-1:-1;;5011:59:37;;;4957:147;-1:-1:-1;;;;;5114:16:37;;:10;:16;;;;;;;;;;:27;5133:8;5114:16;:27;:::i;:::-;-1:-1:-1;5151:29:37;;;;5183:4;5151:29;;;;;;;;;:36;;-1:-1:-1;;5151:36:37;;;;;;5203:52;;;;;5222:4;;5228:8;;5238:16;;5203:52;:::i;4603:312:25:-;4683:4;-1:-1:-1;;;;;4692:6:25;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:25;:32;-1:-1:-1;;;;;;;;;;;1519:53:30;-1:-1:-1;;;;;1519:53:30;;1441:138;4753:32:25;-1:-1:-1;;;;;4753:42:25;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:25;;;;;;;;;;;859:84:37;2334:13:23;:11;:13::i;6057:538:25:-;6174:17;-1:-1:-1;;;;;6156:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:25;;;;;;;;-1:-1:-1;;6156:52:25;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:25;;-1:-1:-1;;;;;2848:32:40;;6518:60:25;;;2830:51:40;2803:18;;6518:60:25;2684:203:40;6152:437:25;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:25;;;;;2466:25:40;;;2439:18;;6317:34:25;2320:177:40;6246:120:25;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:25;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:25;;;;;;;;;;;2658:162:23;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;2830:51:40;2803:18;;2763:40:23;2684:203:40;3774:248:23;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;2264:344:30:-:0;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:30;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;1671:281:30:-;1748:17;-1:-1:-1;;;;;1748:29:30;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:30;;-1:-1:-1;;;;;2848:32:40;;1805:47:30;;;2830:51:40;2803:18;;1805:47:30;2684:203:40;1744:119:30;-1:-1:-1;;;;;;;;;;;1872:73:30;;-1:-1:-1;;;;;;1872:73:30;-1:-1:-1;;;;;1872:73:30;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:30:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:30;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;2848:32:40;;4917:24:34;;;2830:51:40;2803:18;;4917:24:34;2684:203:40;4837:119:34;-1:-1:-1;4976:10:34;4589:408;4421:582;;;;;:::o;5543:487::-;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:40:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:716;211:5;243:1;267:18;259:6;256:30;253:56;;;289:18;;:::i;:::-;-1:-1:-1;444:2:40;438:9;-1:-1:-1;;357:2:40;336:15;;332:29;;502:2;490:15;486:29;474:42;;567:22;;;546:18;531:34;;528:62;525:88;;;593:18;;:::i;:::-;629:2;622:22;677;;;662:6;-1:-1:-1;662:6:40;714:16;;;711:25;-1:-1:-1;708:45:40;;;749:1;746;739:12;708:45;799:6;794:3;787:4;779:6;775:17;762:44;854:1;847:4;838:6;830;826:19;822:30;815:41;;146:716;;;;;:::o;867:222::-;910:5;963:3;956:4;948:6;944:17;940:27;930:55;;981:1;978;971:12;930:55;1003:80;1079:3;1070:6;1057:20;1050:4;1042:6;1038:17;1003:80;:::i;1094:322::-;1163:6;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1272:9;1259:23;1305:18;1297:6;1294:30;1291:50;;;1337:1;1334;1327:12;1291:50;1360;1402:7;1393:6;1382:9;1378:22;1360:50;:::i;:::-;1350:60;1094:322;-1:-1:-1;;;;1094:322:40:o;1613:173::-;1681:20;;-1:-1:-1;;;;;1730:31:40;;1720:42;;1710:70;;1776:1;1773;1766:12;1710:70;1613:173;;;:::o;1791:524::-;1868:6;1876;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1968:29;1987:9;1968:29;:::i;:::-;1958:39;;2048:2;2037:9;2033:18;2020:32;2075:18;2067:6;2064:30;2061:50;;;2107:1;2104;2097:12;2061:50;2130:22;;2183:4;2175:13;;2171:27;-1:-1:-1;2161:55:40;;2212:1;2209;2202:12;2161:55;2235:74;2301:7;2296:2;2283:16;2278:2;2274;2270:11;2235:74;:::i;:::-;2225:84;;;1791:524;;;;;:::o;2892:250::-;2977:1;2987:113;3001:6;2998:1;2995:13;2987:113;;;3077:11;;;3071:18;3058:11;;;3051:39;3023:2;3016:10;2987:113;;;-1:-1:-1;;3134:1:40;3116:16;;3109:27;2892:250::o;3147:271::-;3189:3;3227:5;3221:12;3254:6;3249:3;3242:19;3270:76;3339:6;3332:4;3327:3;3323:14;3316:4;3309:5;3305:16;3270:76;:::i;:::-;3400:2;3379:15;-1:-1:-1;;3375:29:40;3366:39;;;;3407:4;3362:50;;3147:271;-1:-1:-1;;3147:271:40:o;3423:220::-;3572:2;3561:9;3554:21;3535:4;3592:45;3633:2;3622:9;3618:18;3610:6;3592:45;:::i;3648:186::-;3707:6;3760:2;3748:9;3739:7;3735:23;3731:32;3728:52;;;3776:1;3773;3766:12;3728:52;3799:29;3818:9;3799:29;:::i;3839:396::-;3917:6;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4017:29;4036:9;4017:29;:::i;:::-;4007:39;;4097:2;4086:9;4082:18;4069:32;4124:18;4116:6;4113:30;4110:50;;;4156:1;4153;4146:12;4110:50;4179;4221:7;4212:6;4201:9;4197:22;4179:50;:::i;4240:610::-;4326:6;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4443:9;4430:23;4476:18;4468:6;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4531:22;;4584:4;4576:13;;4572:27;-1:-1:-1;4562:55:40;;4613:1;4610;4603:12;4562:55;4653:2;4640:16;4679:18;4671:6;4668:30;4665:50;;;4711:1;4708;4701:12;4665:50;4764:7;4759:2;4749:6;4746:1;4742:14;4738:2;4734:23;4730:32;4727:45;4724:65;;;4785:1;4782;4775:12;4724:65;4816:2;4808:11;;;;;4838:6;;-1:-1:-1;4240:610:40;-1:-1:-1;;;4240:610:40:o;4855:1007::-;5043:4;5091:2;5080:9;5076:18;5121:2;5110:9;5103:21;5144:6;5179;5173:13;5210:6;5202;5195:22;5248:2;5237:9;5233:18;5226:25;;5310:2;5300:6;5297:1;5293:14;5282:9;5278:30;5274:39;5260:53;;5348:2;5340:6;5336:15;5369:1;5379:454;5393:6;5390:1;5387:13;5379:454;;;5458:22;;;-1:-1:-1;;5454:36:40;5442:49;;5514:13;;5559:9;;-1:-1:-1;;;;;5555:35:40;5540:51;;5638:2;5630:11;;;5624:18;5679:2;5662:15;;;5655:27;;;5624:18;5705:48;;5737:15;;5624:18;5705:48;:::i;:::-;5695:58;-1:-1:-1;;5788:2:40;5811:12;;;;5776:15;;;;;5415:1;5408:9;5379:454;;;-1:-1:-1;5850:6:40;;4855:1007;-1:-1:-1;;;;;;4855:1007:40:o;6081:380::-;6160:1;6156:12;;;;6203;;;6224:61;;6278:4;6270:6;6266:17;6256:27;;6224:61;6331:2;6323:6;6320:14;6300:18;6297:38;6294:161;;6377:10;6372:3;6368:20;6365:1;6358:31;6412:4;6409:1;6402:15;6440:4;6437:1;6430:15;6294:161;;6081:380;;;:::o;6595:799::-;6725:3;6754:1;6787:6;6781:13;6817:36;6843:9;6817:36;:::i;:::-;6884:1;6869:17;;6895:133;;;;7042:1;7037:332;;;;6862:507;;6895:133;-1:-1:-1;;6928:24:40;;6916:37;;7001:14;;6994:22;6982:35;;6973:45;;;-1:-1:-1;6895:133:40;;7037:332;7068:6;7065:1;7058:17;7116:4;7113:1;7103:18;7143:1;7157:166;7171:6;7168:1;7165:13;7157:166;;;7251:14;;7238:11;;;7231:35;7307:1;7294:15;;;;7193:4;7186:12;7157:166;;;7161:3;;7352:6;7347:3;7343:16;7336:23;;6862:507;-1:-1:-1;7385:3:40;;6595:799;-1:-1:-1;;;;;6595:799:40:o;7399:317::-;-1:-1:-1;;;;;7576:32:40;;7558:51;;7645:2;7640;7625:18;;7618:30;;;-1:-1:-1;;7665:45:40;;7691:18;;7683:6;7665:45;:::i;7721:127::-;7782:10;7777:3;7773:20;7770:1;7763:31;7813:4;7810:1;7803:15;7837:4;7834:1;7827:15;7853:127;7914:10;7909:3;7905:20;7902:1;7895:31;7945:4;7942:1;7935:15;7969:4;7966:1;7959:15;7985:135;8024:3;8045:17;;;8042:43;;8065:18;;:::i;:::-;-1:-1:-1;8112:1:40;8101:13;;7985:135::o;8125:128::-;8192:9;;;8213:11;;;8210:37;;;8227:18;;:::i;8258:125::-;8323:9;;;8344:10;;;8341:36;;;8357:18;;:::i;8388:518::-;8490:2;8485:3;8482:11;8479:421;;;8526:5;8523:1;8516:16;8570:4;8567:1;8557:18;8640:2;8628:10;8624:19;8621:1;8617:27;8611:4;8607:38;8676:4;8664:10;8661:20;8658:47;;;-1:-1:-1;8699:4:40;8658:47;8754:2;8749:3;8745:12;8742:1;8738:20;8732:4;8728:31;8718:41;;8809:81;8827:2;8820:5;8817:13;8809:81;;;8886:1;8872:16;;8853:1;8842:13;8809:81;;9082:1302;9208:3;9202:10;9235:18;9227:6;9224:30;9221:56;;;9257:18;;:::i;:::-;9286:97;9376:6;9336:38;9368:4;9362:11;9336:38;:::i;:::-;9330:4;9286:97;:::i;:::-;9432:4;9463:2;9452:14;;9480:1;9475:652;;;;10171:1;10188:6;10185:89;;;-1:-1:-1;10240:19:40;;;10234:26;10185:89;-1:-1:-1;;9039:1:40;9035:11;;;9031:24;9027:29;9017:40;9063:1;9059:11;;;9014:57;10287:81;;9445:933;;9475:652;6542:1;6535:14;;;6579:4;6566:18;;-1:-1:-1;;9511:20:40;;;9632:222;9646:7;9643:1;9640:14;9632:222;;;9728:19;;;9722:26;9707:42;;9835:4;9820:20;;;;9788:1;9776:14;;;;9662:12;9632:222;;;9636:3;9882:6;9873:7;9870:19;9867:201;;;9943:19;;;9937:26;-1:-1:-1;;10026:1:40;10022:14;;;10038:3;10018:24;10014:37;10010:42;9995:58;9980:74;;9867:201;-1:-1:-1;;;;10114:1:40;10098:14;;;10094:22;10081:36;;-1:-1:-1;9082:1302:40:o;10389:480::-;-1:-1:-1;;;;;10614:32:40;;10596:51;;10683:2;10678;10663:18;;10656:30;;;-1:-1:-1;;10709:45:40;;10735:18;;10727:6;10709:45;:::i;:::-;10802:9;10794:6;10790:22;10785:2;10774:9;10770:18;10763:50;10830:33;10856:6;10848;10830:33;:::i;:::-;10822:41;10389:480;-1:-1:-1;;;;;;10389:480:40:o;10874:184::-;10944:6;10997:2;10985:9;10976:7;10972:23;10968:32;10965:52;;;11013:1;11010;11003:12;10965:52;-1:-1:-1;11036:16:40;;10874:184;-1:-1:-1;10874:184:40:o;11063:287::-;11192:3;11230:6;11224:13;11246:66;11305:6;11300:3;11293:4;11285:6;11281:17;11246:66;:::i;:::-;11328:16;;;;;11063:287;-1:-1:-1;;11063:287:40:o", + "object": "0x6080604052600436106100e4575f3560e01c80638129fc1c11610087578063e5abdcef11610057578063e5abdcef14610285578063ebed6dab146102a4578063f2fde38b146102b8578063f5ab196e146102d7575f5ffd5b80638129fc1c146101cf5780638da5cb5b146101e3578063ad3cb1cc14610229578063ce43c03214610266575f5ffd5b806352ac2091116100c257806352ac20911461015057806352d1902d1461018657806354fd4d50146101a8578063715018a6146101bb575f5ffd5b8063117720be146100e857806336a941341461011c5780634f1ef2861461013d575b5f5ffd5b3480156100f3575f5ffd5b50610107610102366004611313565b610303565b60405190151581526020015b60405180910390f35b348015610127575f5ffd5b5061013b610136366004611313565b610313565b005b61013b61014b366004611368565b610349565b34801561015b575f5ffd5b5061010761016a366004611313565b80516020918201205f9081526001909152604090205460ff1690565b348015610191575f5ffd5b5061019a610364565b604051908152602001610113565b3480156101b3575f5ffd5b50600161019a565b3480156101c6575f5ffd5b5061013b61037f565b3480156101da575f5ffd5b5061013b610392565b3480156101ee575f5ffd5b507f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546040516001600160a01b039091168152602001610113565b348015610234575f5ffd5b50610259604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516101139190611413565b348015610271575f5ffd5b50610259610280366004611425565b6104a0565b348015610290575f5ffd5b5061013b61029f36600461143e565b610549565b3480156102af575f5ffd5b5061013b610592565b3480156102c3575f5ffd5b5061013b6102d2366004611425565b6106e9565b3480156102e2575f5ffd5b506102f66102f136600461147f565b610728565b60405161011391906114f0565b5f61030d826109eb565b92915050565b8061031d816109eb565b61033a57604051630a1de65160e31b815260040160405180910390fd5b610345338383610bfc565b5050565b610351610d71565b61035a82610e15565b6103458282610e1d565b5f61036d610ed9565b505f5160206118165f395f51905f5290565b610387610f22565b6103905f610f7d565b565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156103d75750825b90505f8267ffffffffffffffff1660011480156103f35750303b155b905081158015610401575080155b1561041f5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561044957845460ff60401b1916600160401b1785555b61045233610fed565b831561049957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d2906020015b60405180910390a15b5050505050565b6001600160a01b0381165f9081526020819052604090208054606091906104c690611573565b80601f01602080910402602001604051908101604052809291908181526020018280546104f290611573565b801561053d5780601f106105145761010080835404028352916020019161053d565b820191905f5260205f20905b81548152906001019060200180831161052057829003601f168201915b50505050509050919050565b610551610f22565b8051819060011180610564575060148151115b1561058257604051630a1de65160e31b815260040160405180910390fd5b61058d838383610bfc565b505050565b335f90815260208190526040812080546105ab90611573565b80601f01602080910402602001604051908101604052809291908181526020018280546105d790611573565b80156106225780601f106105f957610100808354040283529160200191610622565b820191905f5260205f20905b81548152906001019060200180831161060557829003601f168201915b505050505090505f815111156106cd57335f908152602081905260408082209051600191839161065291906115ab565b604080519182900390912082526020808301939093529081015f908120805460ff19169415159490941790935533835290829052812061069191611220565b7ff5a79d28213d53340730f0c5a952f4809e33db20cbe21a2a0b5fa7d77fa107b333826040516106c292919061161c565b60405180910390a150565b6040516341c5396760e01b815260040160405180910390fd5b50565b6106f1610f22565b6001600160a01b03811661071f57604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6106e681610f7d565b60605f8267ffffffffffffffff8111156107445761074461126a565b60405190808252806020026020018201604052801561078957816020015b604080518082019091525f8152606060208201528152602001906001900390816107625790505b5090505f805b84811015610935575f5f8787848181106107ab576107ab61163f565b90506020020160208101906107c09190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f2080546107ea90611573565b15905061092d57604051806040016040528087878481811061080e5761080e61163f565b90506020020160208101906108239190611425565b6001600160a01b031681526020015f5f8989868181106108455761084561163f565b905060200201602081019061085a9190611425565b6001600160a01b03166001600160a01b031681526020019081526020015f20805461088490611573565b80601f01602080910402602001604051908101604052809291908181526020018280546108b090611573565b80156108fb5780601f106108d2576101008083540402835291602001916108fb565b820191905f5260205f20905b8154815290600101906020018083116108de57829003601f168201915b505050505081525083838061090f90611667565b9450815181106109215761092161163f565b60200260200101819052505b60010161078f565b505f8167ffffffffffffffff8111156109505761095061126a565b60405190808252806020026020018201604052801561099557816020015b604080518082019091525f81526060602082015281526020019060019003908161096e5790505b5090505f5b828110156109e1578381815181106109b4576109b461163f565b60200260200101518282815181106109ce576109ce61163f565b602090810291909101015260010161099a565b5095945050505050565b5f6001825110806109fd575060148251115b15610a0957505f919050565b815f81518110610a1b57610a1b61163f565b6020910101516001600160f81b031916605f60f81b1480610a6d57508160018351610a46919061167f565b81518110610a5657610a5661163f565b6020910101516001600160f81b031916605f60f81b145b15610a7957505f919050565b5f5b8251811015610bf357603060f81b838281518110610a9b57610a9b61163f565b01602001516001600160f81b03191610801590610adc5750603960f81b838281518110610aca57610aca61163f565b01602001516001600160f81b03191611155b158015610b3e5750606160f81b838281518110610afb57610afb61163f565b01602001516001600160f81b03191610801590610b3c5750607a60f81b838281518110610b2a57610b2a61163f565b01602001516001600160f81b03191611155b155b8015610b6f5750828181518110610b5757610b5761163f565b6020910101516001600160f81b031916605f60f81b14155b15610b7c57505f92915050565b828181518110610b8e57610b8e61163f565b6020910101516001600160f81b031916605f60f81b148015610bde575082610bb7826001611692565b81518110610bc757610bc761163f565b6020910101516001600160f81b031916605f60f81b145b15610beb57505f92915050565b600101610a7b565b50600192915050565b80516020808301919091205f818152600190925260409091205460ff1615610c375760405163506517a760e11b815260040160405180910390fd5b6001600160a01b0384165f9081526020819052604081208054610c5990611573565b80601f0160208091040260200160405190810160405280929190818152602001828054610c8590611573565b8015610cd05780601f10610ca757610100808354040283529160200191610cd0565b820191905f5260205f20905b815481529060010190602001808311610cb357829003601f168201915b505050505090505f81511115610d015780516020808301919091205f908152600190915260409020805460ff191690555b6001600160a01b0385165f908152602081905260409020610d2285826116e9565b505f82815260016020819052604091829020805460ff19169091179055517fdc393f1f31882fea068a12acfed8ed6e9f7e88a6ed213355b5afb78ad76a704590610490908790879085906117a4565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480610df757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316610deb5f5160206118165f395f51905f52546001600160a01b031690565b6001600160a01b031614155b156103905760405163703e46dd60e11b815260040160405180910390fd5b6106e6610f22565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015610e77575060408051601f3d908101601f19168201909252610e74918101906117e3565b60015b610e9f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610716565b5f5160206118165f395f51905f528114610ecf57604051632a87526960e21b815260048101829052602401610716565b61058d8383610ffe565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146103905760405163703e46dd60e11b815260040160405180910390fd5b33610f547f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c199300546001600160a01b031690565b6001600160a01b0316146103905760405163118cdaa760e01b8152336004820152602401610716565b7f9016d09d72d40fdae2fd8ceac6b6234c7706214fd39c1cd1e609a0528c19930080546001600160a01b031981166001600160a01b03848116918217845560405192169182907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0905f90a3505050565b610ff5611053565b6106e68161109c565b611007826110a4565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561104b5761058d8282611107565b610345611179565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661039057604051631afcd79f60e31b815260040160405180910390fd5b6106f1611053565b806001600160a01b03163b5f036110d957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610716565b5f5160206118165f395f51905f5280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f5f846001600160a01b03168460405161112391906117fa565b5f60405180830381855af49150503d805f811461115b576040519150601f19603f3d011682016040523d82523d5f602084013e611160565b606091505b5091509150611170858383611198565b95945050505050565b34156103905760405163b398979f60e01b815260040160405180910390fd5b6060826111ad576111a8826111f7565b6111f0565b81511580156111c457506001600160a01b0384163b155b156111ed57604051639996b31560e01b81526001600160a01b0385166004820152602401610716565b50805b9392505050565b8051156112075780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b50805461122c90611573565b5f825580601f1061123b575050565b601f0160209004905f5260205f20908101906106e691905b80821115611266575f8155600101611253565b5090565b634e487b7160e01b5f52604160045260245ffd5b5f5f67ffffffffffffffff8411156112985761129861126a565b50604051601f19601f85018116603f0116810181811067ffffffffffffffff821117156112c7576112c761126a565b6040528381529050808284018510156112de575f5ffd5b838360208301375f60208583010152509392505050565b5f82601f830112611304575f5ffd5b6111f08383356020850161127e565b5f60208284031215611323575f5ffd5b813567ffffffffffffffff811115611339575f5ffd5b611345848285016112f5565b949350505050565b80356001600160a01b0381168114611363575f5ffd5b919050565b5f5f60408385031215611379575f5ffd5b6113828361134d565b9150602083013567ffffffffffffffff81111561139d575f5ffd5b8301601f810185136113ad575f5ffd5b6113bc8582356020840161127e565b9150509250929050565b5f5b838110156113e05781810151838201526020016113c8565b50505f910152565b5f81518084526113ff8160208601602086016113c6565b601f01601f19169290920160200192915050565b602081525f6111f060208301846113e8565b5f60208284031215611435575f5ffd5b6111f08261134d565b5f5f6040838503121561144f575f5ffd5b6114588361134d565b9150602083013567ffffffffffffffff811115611473575f5ffd5b6113bc858286016112f5565b5f5f60208385031215611490575f5ffd5b823567ffffffffffffffff8111156114a6575f5ffd5b8301601f810185136114b6575f5ffd5b803567ffffffffffffffff8111156114cc575f5ffd5b8560208260051b84010111156114e0575f5ffd5b6020919091019590945092505050565b5f602082016020835280845180835260408501915060408160051b8601019250602086015f5b8281101561156757868503603f19018452815180516001600160a01b03168652602090810151604091870182905290611551908701826113e8565b9550506020938401939190910190600101611516565b50929695505050505050565b600181811c9082168061158757607f821691505b6020821081036115a557634e487b7160e01b5f52602260045260245ffd5b50919050565b5f5f83546115b881611573565b6001821680156115cf57600181146115e457611611565b60ff1983168652811515820286019350611611565b865f5260205f205f5b83811015611609578154888201526001909101906020016115ed565b505081860193505b509195945050505050565b6001600160a01b03831681526040602082018190525f90611345908301846113e8565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b5f6001820161167857611678611653565b5060010190565b8181038181111561030d5761030d611653565b8082018082111561030d5761030d611653565b601f82111561058d57805f5260205f20601f840160051c810160208510156116ca5750805b601f840160051c820191505b81811015610499575f81556001016116d6565b815167ffffffffffffffff8111156117035761170361126a565b611717816117118454611573565b846116a5565b6020601f821160018114611749575f83156117325750848201515b5f19600385901b1c1916600184901b178455610499565b5f84815260208120601f198516915b828110156117785787850151825560209485019460019092019101611758565b508482101561179557868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6001600160a01b03841681526060602082018190525f906117c7908301856113e8565b82810360408401526117d981856113e8565b9695505050505050565b5f602082840312156117f3575f5ffd5b5051919050565b5f825161180b8184602087016113c6565b919091019291505056fe360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbca26469706673582212202cd847cb3edf0b7eef198ed0ae022f99a0d18fa21cb2a945077443915317943b64736f6c634300081b0033", + "sourceMap": "285:5015:37:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2491:134;;;;;;;;;;-1:-1:-1;2491:134:37;;;;;:::i;:::-;;:::i;:::-;;;1586:14:40;;1579:22;1561:41;;1549:2;1534:18;2491:134:37;;;;;;;;1375:273;;;;;;;;;;-1:-1:-1;1375:273:37;;;;;:::i;:::-;;:::i;:::-;;4161:214:25;;;;;;:::i;:::-;;:::i;2335:150:37:-;;;;;;;;;;-1:-1:-1;2335:150:37;;;;;:::i;:::-;2451:26;;;;;;;2412:4;2435:43;;;:15;:43;;;;;;;;;;2335:150;3708:134:25;;;;;;;;;;;;;:::i;:::-;;;2466:25:40;;;2454:2;2439:18;3708:134:25;2320:177:40;2134:76:37;;;;;;;;;;-1:-1:-1;2202:1:37;2134:76;;3155:101:23;;;;;;;;;;;;;:::i;788:84:37:-;;;;;;;;;;;;;:::i;2441:144:23:-;;;;;;;;;;-1:-1:-1;1313:22:23;2570:8;2441:144;;-1:-1:-1;;;;;2570:8:23;;;2830:51:40;;2818:2;2803:18;2441:144:23;2684:203:40;1819:58:25;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;2216:113:37:-;;;;;;;;;;-1:-1:-1;2216:113:37;;;;;:::i;:::-;;:::i;1011:358::-;;;;;;;;;;-1:-1:-1;1011:358:37;;;;;:::i;:::-;;:::i;1654:434::-;;;;;;;;;;;;;:::i;3405:215:23:-;;;;;;;;;;-1:-1:-1;3405:215:23;;;;;:::i;:::-;;:::i;2631:621:37:-;;;;;;;;;;-1:-1:-1;2631:621:37;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;2491:134::-;2563:4;2586:32;2608:8;2586:15;:32::i;:::-;2579:39;2491:134;-1:-1:-1;;2491:134:37:o;1375:273::-;1496:8;1520:18;1496:8;1520:15;:18::i;:::-;1515:74;;1561:17;;-1:-1:-1;;;1561:17:37;;;;;;;;;;;1515:74;1599:42;1617:10;1629:8;1639:1;1599:17;:42::i;:::-;1434:214;1375:273;:::o;4161:214:25:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:25;:::o;3155:101:23:-;2334:13;:11;:13::i;:::-;3219:30:::1;3246:1;3219:18;:30::i;:::-;3155:101::o:0;788:84:37:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;839:26:37::1;854:10;839:14;:26::i;:::-;5070:14:24::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;6020:50:40;;5142:14:24;;6008:2:40;5993:18;5142:14:24;;;;;;;;5066:101;4092:1081;;;;;788:84:37:o;2216:113::-;-1:-1:-1;;;;;2306:16:37;;:10;:16;;;;;;;;;;2299:23;;2274:13;;2306:16;2299:23;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2216:113;;;:::o;1011:358::-;2334:13:23;:11;:13::i;:::-;1236:8:37;;1122;;1247:1:::1;-1:-1:-1::0;1236:12:37;:29:::1;;;1263:2;1252:1;:8;:13;1236:29;1232:84;;;1288:17;;-1:-1:-1::0;;;1288:17:37::1;;;;;;;;;;;1232:84;1326:36;1344:4;1350:8;1360:1;1326:17;:36::i;:::-;1089:280;1011:358:::0;;:::o;1654:434::-;1735:10;1699:22;1724;;;;;;;;;;1699:47;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1827:1;1808:8;1802:22;:26;1798:284;;;1887:10;1904:5;1876:22;;;;;;;;;;;1860:40;;1844:15;;1904:5;;1860:40;;1876:22;1860:40;:::i;:::-;;;;;;;;;;;1844:57;;;;;;;;;;;;;-1:-1:-1;1844:57:37;;;:65;;-1:-1:-1;;1844:65:37;;;;;;;;;;;1941:10;1930:22;;;;;;;;1923:29;;;:::i;:::-;1972:38;1989:10;2001:8;1972:38;;;;;;;:::i;:::-;;;;;;;;1689:399;1654:434::o;1798:284::-;2048:23;;-1:-1:-1;;;2048:23:37;;;;;;;;;;;1798:284;1689:399;1654:434::o;3405:215:23:-;2334:13;:11;:13::i;:::-;-1:-1:-1;;;;;3489:22:23;::::1;3485:91;;3534:31;::::0;-1:-1:-1;;;3534:31:23;;3562:1:::1;3534:31;::::0;::::1;2830:51:40::0;2803:18;;3534:31:23::1;;;;;;;;3485:91;3585:28;3604:8;3585:18;:28::i;2631:621:37:-:0;2706:13;2731:19;2764:9;2753:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;2753:28:37;;;;;;;;;;;;;;;-1:-1:-1;2731:50:37;-1:-1:-1;2791:13:37;;2818:214;2838:20;;;2818:214;;;2889:10;:24;2900:9;;2910:1;2900:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2889:24:37;-1:-1:-1;;;;;2889:24:37;;;;;;;;;;;;2883:38;;;;;:::i;:::-;:43;;-1:-1:-1;2879:143:37;;2963:44;;;;;;;;2968:9;;2978:1;2968:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2963:44:37;;;;;2982:10;:24;2993:9;;3003:1;2993:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2982:24:37;-1:-1:-1;;;;;2982:24:37;;;;;;;;;;;;2963:44;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2946:5;2952:7;;;;;:::i;:::-;;;2946:14;;;;;;;;:::i;:::-;;;;;;:61;;;;2879:143;2860:3;;2818:214;;;;3091:20;3125:5;3114:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;3114:17:37;;;;;;;;;;;;;;;-1:-1:-1;3091:40:37;-1:-1:-1;3146:9:37;3141:81;3165:5;3161:1;:9;3141:81;;;3203:5;3209:1;3203:8;;;;;;;;:::i;:::-;;;;;;;3191:6;3198:1;3191:9;;;;;;;;:::i;:::-;;;;;;;;;;:20;3172:3;;3141:81;;;-1:-1:-1;3239:6:37;2631:621;-1:-1:-1;;;;;2631:621:37:o;3541:1108::-;3612:4;3734:1;3716:8;:15;:19;:43;;;;3757:2;3739:8;:15;:20;3716:43;3712:86;;;-1:-1:-1;3782:5:37;;3541:1108;-1:-1:-1;3541:1108:37:o;3712:86::-;3859:8;3868:1;3859:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3859:11:37;-1:-1:-1;;;3859:19:37;;:60;;;3882:8;3909:1;3891:8;:15;:19;;;;:::i;:::-;3882:29;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;3882:29:37;-1:-1:-1;;;3882:37:37;3859:60;3855:103;;;-1:-1:-1;3942:5:37;;3541:1108;-1:-1:-1;3541:1108:37:o;3855:103::-;3973:9;3968:653;3992:8;:15;3988:1;:19;3968:653;;;4141:4;4126:19;;:8;4135:1;4126:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4126:11:37;:19;;;;:42;;;4164:4;4149:19;;:8;4158:1;4149:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4149:11:37;:19;;4126:42;4124:45;:121;;;;;4217:4;4202:19;;:8;4211:1;4202:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4202:11:37;:19;;;;:42;;;4240:4;4225:19;;:8;4234:1;4225:11;;;;;;;;:::i;:::-;;;;;-1:-1:-1;;;;;;4225:11:37;:19;;4202:42;4200:45;4124:121;:174;;;;;4278:8;4287:1;4278:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4278:11:37;-1:-1:-1;;;4278:19:37;4276:22;4124:174;4103:260;;;-1:-1:-1;4343:5:37;;3541:1108;-1:-1:-1;;3541:1108:37:o;4103:260::-;4518:8;4527:1;4518:11;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4518:11:37;-1:-1:-1;;;4518:19:37;:46;;;;-1:-1:-1;4541:8:37;4550:5;:1;4554;4550:5;:::i;:::-;4541:15;;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;;;;;4541:15:37;-1:-1:-1;;;4541:23:37;4518:46;4514:97;;;-1:-1:-1;4591:5:37;;3541:1108;-1:-1:-1;;3541:1108:37:o;4514:97::-;4009:3;;3968:653;;;-1:-1:-1;4638:4:37;;3541:1108;-1:-1:-1;;3541:1108:37:o;4655:643::-;4778:12;;;;;;;;;;4755:20;4804:29;;;:15;:29;;;;;;;;;;4800:82;;;4856:15;;-1:-1:-1;;;4856:15:37;;;;;;;;;;;4800:82;-1:-1:-1;;;;;4925:16:37;;4892:30;4925:16;;;;;;;;;;4892:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5030:1;5003:16;4997:30;:34;4993:147;;;5063:34;;;;;;;;;;5101:5;5047:51;;;:15;:51;;;;;;:59;;-1:-1:-1;;5047:59:37;;;4993:147;-1:-1:-1;;;;;5150:16:37;;:10;:16;;;;;;;;;;:27;5169:8;5150:16;:27;:::i;:::-;-1:-1:-1;5187:29:37;;;;5219:4;5187:29;;;;;;;;;:36;;-1:-1:-1;;5187:36:37;;;;;;5239:52;;;;;5258:4;;5264:8;;5274:16;;5239:52;:::i;4603:312:25:-;4683:4;-1:-1:-1;;;;;4692:6:25;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:25;:32;-1:-1:-1;;;;;;;;;;;1519:53:30;-1:-1:-1;;;;;1519:53:30;;1441:138;4753:32:25;-1:-1:-1;;;;;4753:42:25;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:25;;;;;;;;;;;895:84:37;2334:13:23;:11;:13::i;6057:538:25:-;6174:17;-1:-1:-1;;;;;6156:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:25;;;;;;;;-1:-1:-1;;6156:52:25;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:25;;-1:-1:-1;;;;;2848:32:40;;6518:60:25;;;2830:51:40;2803:18;;6518:60:25;2684:203:40;6152:437:25;-1:-1:-1;;;;;;;;;;;6250:40:25;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:25;;;;;2466:25:40;;;2439:18;;6317:34:25;2320:177:40;6246:120:25;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:25;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:25;;;;;;;;;;;2658:162:23;966:10:26;2717:7:23;1313:22;2570:8;-1:-1:-1;;;;;2570:8:23;;2441:144;2717:7;-1:-1:-1;;;;;2717:23:23;;2713:101;;2763:40;;-1:-1:-1;;;2763:40:23;;966:10:26;2763:40:23;;;2830:51:40;2803:18;;2763:40:23;2684:203:40;3774:248:23;1313:22;3923:8;;-1:-1:-1;;;;;;3941:19:23;;-1:-1:-1;;;;;3941:19:23;;;;;;;;3975:40;;3923:8;;;;;3975:40;;3847:24;;3975:40;3837:185;;3774:248;:::o;1847:127::-;6931:20:24;:18;:20::i;:::-;1929:38:23::1;1954:12;1929:24;:38::i;2264:344:30:-:0;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:30;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;1980:235:23;6931:20:24;:18;:20::i;1671:281:30:-;1748:17;-1:-1:-1;;;;;1748:29:30;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:30;;-1:-1:-1;;;;;2848:32:40;;1805:47:30;;;2830:51:40;2803:18;;1805:47:30;2684:203:40;1744:119:30;-1:-1:-1;;;;;;;;;;;1872:73:30;;-1:-1:-1;;;;;;1872:73:30;-1:-1:-1;;;;;1872:73:30;;;;;;;;;;1671:281::o;3900:253:34:-;3983:12;4008;4022:23;4049:6;-1:-1:-1;;;;;4049:19:34;4069:4;4049:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4007:67;;;;4091:55;4118:6;4126:7;4135:10;4091:26;:55::i;:::-;4084:62;3900:253;-1:-1:-1;;;;;3900:253:34:o;6113:122:30:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:30;;;;;;;;;;;4421:582:34;4565:12;4594:7;4589:408;;4617:19;4625:10;4617:7;:19::i;:::-;4589:408;;;4841:17;;:22;:49;;;;-1:-1:-1;;;;;;4867:18:34;;;:23;4841:49;4837:119;;;4917:24;;-1:-1:-1;;;4917:24:34;;-1:-1:-1;;;;;2848:32:40;;4917:24:34;;;2830:51:40;2803:18;;4917:24:34;2684:203:40;4837:119:34;-1:-1:-1;4976:10:34;4589:408;4421:582;;;;;:::o;5543:487::-;5674:17;;:21;5670:354;;5871:10;5865:17;5927:15;5914:10;5910:2;5906:19;5899:44;5670:354;5994:19;;-1:-1:-1;;;5994:19:34;;;;;;;;;;;-1:-1:-1;;;;;;;:::i;:::-;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:127:40:-;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:716;211:5;243:1;267:18;259:6;256:30;253:56;;;289:18;;:::i;:::-;-1:-1:-1;444:2:40;438:9;-1:-1:-1;;357:2:40;336:15;;332:29;;502:2;490:15;486:29;474:42;;567:22;;;546:18;531:34;;528:62;525:88;;;593:18;;:::i;:::-;629:2;622:22;677;;;662:6;-1:-1:-1;662:6:40;714:16;;;711:25;-1:-1:-1;708:45:40;;;749:1;746;739:12;708:45;799:6;794:3;787:4;779:6;775:17;762:44;854:1;847:4;838:6;830;826:19;822:30;815:41;;146:716;;;;;:::o;867:222::-;910:5;963:3;956:4;948:6;944:17;940:27;930:55;;981:1;978;971:12;930:55;1003:80;1079:3;1070:6;1057:20;1050:4;1042:6;1038:17;1003:80;:::i;1094:322::-;1163:6;1216:2;1204:9;1195:7;1191:23;1187:32;1184:52;;;1232:1;1229;1222:12;1184:52;1272:9;1259:23;1305:18;1297:6;1294:30;1291:50;;;1337:1;1334;1327:12;1291:50;1360;1402:7;1393:6;1382:9;1378:22;1360:50;:::i;:::-;1350:60;1094:322;-1:-1:-1;;;;1094:322:40:o;1613:173::-;1681:20;;-1:-1:-1;;;;;1730:31:40;;1720:42;;1710:70;;1776:1;1773;1766:12;1710:70;1613:173;;;:::o;1791:524::-;1868:6;1876;1929:2;1917:9;1908:7;1904:23;1900:32;1897:52;;;1945:1;1942;1935:12;1897:52;1968:29;1987:9;1968:29;:::i;:::-;1958:39;;2048:2;2037:9;2033:18;2020:32;2075:18;2067:6;2064:30;2061:50;;;2107:1;2104;2097:12;2061:50;2130:22;;2183:4;2175:13;;2171:27;-1:-1:-1;2161:55:40;;2212:1;2209;2202:12;2161:55;2235:74;2301:7;2296:2;2283:16;2278:2;2274;2270:11;2235:74;:::i;:::-;2225:84;;;1791:524;;;;;:::o;2892:250::-;2977:1;2987:113;3001:6;2998:1;2995:13;2987:113;;;3077:11;;;3071:18;3058:11;;;3051:39;3023:2;3016:10;2987:113;;;-1:-1:-1;;3134:1:40;3116:16;;3109:27;2892:250::o;3147:271::-;3189:3;3227:5;3221:12;3254:6;3249:3;3242:19;3270:76;3339:6;3332:4;3327:3;3323:14;3316:4;3309:5;3305:16;3270:76;:::i;:::-;3400:2;3379:15;-1:-1:-1;;3375:29:40;3366:39;;;;3407:4;3362:50;;3147:271;-1:-1:-1;;3147:271:40:o;3423:220::-;3572:2;3561:9;3554:21;3535:4;3592:45;3633:2;3622:9;3618:18;3610:6;3592:45;:::i;3648:186::-;3707:6;3760:2;3748:9;3739:7;3735:23;3731:32;3728:52;;;3776:1;3773;3766:12;3728:52;3799:29;3818:9;3799:29;:::i;3839:396::-;3917:6;3925;3978:2;3966:9;3957:7;3953:23;3949:32;3946:52;;;3994:1;3991;3984:12;3946:52;4017:29;4036:9;4017:29;:::i;:::-;4007:39;;4097:2;4086:9;4082:18;4069:32;4124:18;4116:6;4113:30;4110:50;;;4156:1;4153;4146:12;4110:50;4179;4221:7;4212:6;4201:9;4197:22;4179:50;:::i;4240:610::-;4326:6;4334;4387:2;4375:9;4366:7;4362:23;4358:32;4355:52;;;4403:1;4400;4393:12;4355:52;4443:9;4430:23;4476:18;4468:6;4465:30;4462:50;;;4508:1;4505;4498:12;4462:50;4531:22;;4584:4;4576:13;;4572:27;-1:-1:-1;4562:55:40;;4613:1;4610;4603:12;4562:55;4653:2;4640:16;4679:18;4671:6;4668:30;4665:50;;;4711:1;4708;4701:12;4665:50;4764:7;4759:2;4749:6;4746:1;4742:14;4738:2;4734:23;4730:32;4727:45;4724:65;;;4785:1;4782;4775:12;4724:65;4816:2;4808:11;;;;;4838:6;;-1:-1:-1;4240:610:40;-1:-1:-1;;;4240:610:40:o;4855:1007::-;5043:4;5091:2;5080:9;5076:18;5121:2;5110:9;5103:21;5144:6;5179;5173:13;5210:6;5202;5195:22;5248:2;5237:9;5233:18;5226:25;;5310:2;5300:6;5297:1;5293:14;5282:9;5278:30;5274:39;5260:53;;5348:2;5340:6;5336:15;5369:1;5379:454;5393:6;5390:1;5387:13;5379:454;;;5458:22;;;-1:-1:-1;;5454:36:40;5442:49;;5514:13;;5559:9;;-1:-1:-1;;;;;5555:35:40;5540:51;;5638:2;5630:11;;;5624:18;5679:2;5662:15;;;5655:27;;;5624:18;5705:48;;5737:15;;5624:18;5705:48;:::i;:::-;5695:58;-1:-1:-1;;5788:2:40;5811:12;;;;5776:15;;;;;5415:1;5408:9;5379:454;;;-1:-1:-1;5850:6:40;;4855:1007;-1:-1:-1;;;;;;4855:1007:40:o;6081:380::-;6160:1;6156:12;;;;6203;;;6224:61;;6278:4;6270:6;6266:17;6256:27;;6224:61;6331:2;6323:6;6320:14;6300:18;6297:38;6294:161;;6377:10;6372:3;6368:20;6365:1;6358:31;6412:4;6409:1;6402:15;6440:4;6437:1;6430:15;6294:161;;6081:380;;;:::o;6595:799::-;6725:3;6754:1;6787:6;6781:13;6817:36;6843:9;6817:36;:::i;:::-;6884:1;6869:17;;6895:133;;;;7042:1;7037:332;;;;6862:507;;6895:133;-1:-1:-1;;6928:24:40;;6916:37;;7001:14;;6994:22;6982:35;;6973:45;;;-1:-1:-1;6895:133:40;;7037:332;7068:6;7065:1;7058:17;7116:4;7113:1;7103:18;7143:1;7157:166;7171:6;7168:1;7165:13;7157:166;;;7251:14;;7238:11;;;7231:35;7307:1;7294:15;;;;7193:4;7186:12;7157:166;;;7161:3;;7352:6;7347:3;7343:16;7336:23;;6862:507;-1:-1:-1;7385:3:40;;6595:799;-1:-1:-1;;;;;6595:799:40:o;7399:317::-;-1:-1:-1;;;;;7576:32:40;;7558:51;;7645:2;7640;7625:18;;7618:30;;;-1:-1:-1;;7665:45:40;;7691:18;;7683:6;7665:45;:::i;7721:127::-;7782:10;7777:3;7773:20;7770:1;7763:31;7813:4;7810:1;7803:15;7837:4;7834:1;7827:15;7853:127;7914:10;7909:3;7905:20;7902:1;7895:31;7945:4;7942:1;7935:15;7969:4;7966:1;7959:15;7985:135;8024:3;8045:17;;;8042:43;;8065:18;;:::i;:::-;-1:-1:-1;8112:1:40;8101:13;;7985:135::o;8125:128::-;8192:9;;;8213:11;;;8210:37;;;8227:18;;:::i;8258:125::-;8323:9;;;8344:10;;;8341:36;;;8357:18;;:::i;8388:518::-;8490:2;8485:3;8482:11;8479:421;;;8526:5;8523:1;8516:16;8570:4;8567:1;8557:18;8640:2;8628:10;8624:19;8621:1;8617:27;8611:4;8607:38;8676:4;8664:10;8661:20;8658:47;;;-1:-1:-1;8699:4:40;8658:47;8754:2;8749:3;8745:12;8742:1;8738:20;8732:4;8728:31;8718:41;;8809:81;8827:2;8820:5;8817:13;8809:81;;;8886:1;8872:16;;8853:1;8842:13;8809:81;;9082:1302;9208:3;9202:10;9235:18;9227:6;9224:30;9221:56;;;9257:18;;:::i;:::-;9286:97;9376:6;9336:38;9368:4;9362:11;9336:38;:::i;:::-;9330:4;9286:97;:::i;:::-;9432:4;9463:2;9452:14;;9480:1;9475:652;;;;10171:1;10188:6;10185:89;;;-1:-1:-1;10240:19:40;;;10234:26;10185:89;-1:-1:-1;;9039:1:40;9035:11;;;9031:24;9027:29;9017:40;9063:1;9059:11;;;9014:57;10287:81;;9445:933;;9475:652;6542:1;6535:14;;;6579:4;6566:18;;-1:-1:-1;;9511:20:40;;;9632:222;9646:7;9643:1;9640:14;9632:222;;;9728:19;;;9722:26;9707:42;;9835:4;9820:20;;;;9788:1;9776:14;;;;9662:12;9632:222;;;9636:3;9882:6;9873:7;9870:19;9867:201;;;9943:19;;;9937:26;-1:-1:-1;;10026:1:40;10022:14;;;10038:3;10018:24;10014:37;10010:42;9995:58;9980:74;;9867:201;-1:-1:-1;;;;10114:1:40;10098:14;;;10094:22;10081:36;;-1:-1:-1;9082:1302:40:o;10389:480::-;-1:-1:-1;;;;;10614:32:40;;10596:51;;10683:2;10678;10663:18;;10656:30;;;-1:-1:-1;;10709:45:40;;10735:18;;10727:6;10709:45;:::i;:::-;10802:9;10794:6;10790:22;10785:2;10774:9;10770:18;10763:50;10830:33;10856:6;10848;10830:33;:::i;:::-;10822:41;10389:480;-1:-1:-1;;;;;;10389:480:40:o;10874:184::-;10944:6;10997:2;10985:9;10976:7;10972:23;10968:32;10965:52;;;11013:1;11010;11003:12;10965:52;-1:-1:-1;11036:16:40;;10874:184;-1:-1:-1;10874:184:40:o;11063:287::-;11192:3;11230:6;11224:13;11246:66;11305:6;11300:3;11293:4;11285:6;11281:17;11246:66;:::i;:::-;11328:16;;;;;11063:287;-1:-1:-1;;11063:287:40:o", "linkReferences": {}, "immutableReferences": { "40567": [ @@ -217,7 +217,7 @@ "upgradeToAndCall(address,bytes)": "4f1ef286", "version()": "54fd4d50" }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUsername\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TakenUsername\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UsernameNotRegistered\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"previousUsername\",\"type\":\"string\"}],\"name\":\"UsernameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"UsernameResigned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"addUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUsername\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"getUsernames\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"internalType\":\"struct User[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"isUsernameRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"isUsernameValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"registerUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/usernames/UsernamesV1.sol\":\"UsernamesV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/usernames/UsernamesV1.sol\":{\"keccak256\":\"0xeed8a0e3aa42ac8ca8cf0094bba683416e0d0d1886aa97cb075c4eb7b19cd7a3\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://e52714b4eb95b4b23741bdb3fdcf8c8a7b5d628ba43817264b83c41d2cdec497\",\"dweb:/ipfs/QmVSkN9Hp56dzWJEFfPAdrLKD4inz3yJ1DSTi8L8DnKTPx\"]}},\"version\":1}", + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.27+commit.40a35a09\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidUsername\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"}],\"name\":\"OwnableInvalidOwner\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"OwnableUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TakenUsername\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UsernameNotRegistered\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"previousUsername\",\"type\":\"string\"}],\"name\":\"UsernameRegistered\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"UsernameResigned\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"addUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"user\",\"type\":\"address\"}],\"name\":\"getUsername\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"addresses\",\"type\":\"address[]\"}],\"name\":\"getUsernames\",\"outputs\":[{\"components\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"},{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"internalType\":\"struct UsernamesV1.User[]\",\"name\":\"\",\"type\":\"tuple[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"isUsernameRegistered\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"isUsernameValid\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"string\",\"name\":\"username\",\"type\":\"string\"}],\"name\":\"registerUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"resignUsername\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"version\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"pure\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"OwnableInvalidOwner(address)\":[{\"details\":\"The owner is not a valid owner account. (eg. `address(0)`)\"}],\"OwnableUnauthorizedAccount(address)\":[{\"details\":\"The caller account is not authorized to perform an operation.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/usernames/UsernamesV1.sol\":\"UsernamesV1\"},\"evmVersion\":\"shanghai\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@contracts/=src/\",\":@forge-std/=lib/forge-std/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/\",\":ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/\",\":erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/\",\":forge-std/=lib/forge-std/src/\",\":halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol\":{\"keccak256\":\"0xc163fcf9bb10138631a9ba5564df1fa25db9adff73bd9ee868a8ae1858fe093a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9706d43a0124053d9880f6e31a59f31bc0a6a3dc1acd66ce0a16e1111658c5f6\",\"dweb:/ipfs/QmUFmfowzkRwGtDu36cXV9SPTBHJ3n7dG9xQiK5B28jTf2\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x631188737069917d2f909d29ce62c4d48611d326686ba6683e26b72a23bfac0b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7a61054ae84cd6c4d04c0c4450ba1d6de41e27e0a2c4f1bcdf58f796b401c609\",\"dweb:/ipfs/QmUvtdp7X1mRVyC3CsHrtPbgoqWaXHp3S1ZR24tpAQYJWM\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xf72d3b11f41fccbbdcacd121f994daab8267ccfceb1fb4f247e4ba274c169d27\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1e46ee40ddc9e2009176ce5d76aa2c046fd68f2ed52d02d77db191365b7c5b2e\",\"dweb:/ipfs/QmZnxgPmCCHosdvbh4J65uTaFYeGtZGzQ1sXRdeh1y68Zr\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol\":{\"keccak256\":\"0xdbef5f0c787055227243a7318ef74c8a5a1108ca3a07f2b3a00ef67769e1e397\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://08e39f23d5b4692f9a40803e53a8156b72b4c1f9902a88cd65ba964db103dab9\",\"dweb:/ipfs/QmPKn6EYDgpga7KtpkA8wV2yJCYGMtc9K4LkJfhKX2RVSV\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x911c3346ee26afe188f3b9dc267ef62a7ccf940aba1afa963e3922f0ca3d8a06\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://04539f4419e44a831807d7203375d2bc6a733da256efd02e51290f5d5015218c\",\"dweb:/ipfs/QmPZ97gsAAgaMRPiE2WJfkzRsudQnW5tPAvMgGj1jcTJtR\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0x9d8da059267bac779a2dbbb9a26c2acf00ca83085e105d62d5d4ef96054a47f5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c78e2aa4313323cecd1ef12a8d6265b96beee1a199923abf55d9a2a9e291ad23\",\"dweb:/ipfs/QmUTs2KStXucZezzFo3EYeqYu47utu56qrF7jj1Gue65vb\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/Errors.sol\":{\"keccak256\":\"0x6afa713bfd42cf0f7656efa91201007ac465e42049d7de1d50753a373648c123\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba1d02f4847670a1b83dec9f7d37f0b0418d6043447b69f3a29a5f9efc547fcf\",\"dweb:/ipfs/QmQ7iH2keLNUKgq2xSWcRmuBE5eZ3F5whYAkAGzCNNoEWB\"]},\"lib/openzeppelin-contracts-upgradeable/lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"src/usernames/UsernamesV1.sol\":{\"keccak256\":\"0x3d0012765a2c9a0a96b156052d6e530feb6b140af87c9e99f73526843751d8f7\",\"license\":\"GNU GENERAL PUBLIC LICENSE\",\"urls\":[\"bzz-raw://8156867b0c788dc6ff3eebdd37e949dc9d3a5b5330359ecad6ebc38fc87946f4\",\"dweb:/ipfs/QmemCY8hmvu5dGiW4k9ssJiwNekgWaHC7mzCWutNuJV7Rq\"]}},\"version\":1}", "metadata": { "compiler": { "version": "0.8.27+commit.40a35a09" }, "language": "Solidity", @@ -328,7 +328,7 @@ "name": "getUsernames", "outputs": [ { - "internalType": "struct User[]", + "internalType": "struct UsernamesV1.User[]", "name": "", "type": "tuple[]", "components": [ @@ -531,10 +531,10 @@ "license": "MIT" }, "src/usernames/UsernamesV1.sol": { - "keccak256": "0xeed8a0e3aa42ac8ca8cf0094bba683416e0d0d1886aa97cb075c4eb7b19cd7a3", + "keccak256": "0x3d0012765a2c9a0a96b156052d6e530feb6b140af87c9e99f73526843751d8f7", "urls": [ - "bzz-raw://e52714b4eb95b4b23741bdb3fdcf8c8a7b5d628ba43817264b83c41d2cdec497", - "dweb:/ipfs/QmVSkN9Hp56dzWJEFfPAdrLKD4inz3yJ1DSTi8L8DnKTPx" + "bzz-raw://8156867b0c788dc6ff3eebdd37e949dc9d3a5b5330359ecad6ebc38fc87946f4", + "dweb:/ipfs/QmemCY8hmvu5dGiW4k9ssJiwNekgWaHC7mzCWutNuJV7Rq" ], "license": "GNU GENERAL PUBLIC LICENSE" }