diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 00000000..1fca6c54 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,4 @@ +{ + "trailingComma": "es5", + "semi": true +} diff --git a/sdk/abi/Integrity.json b/sdk/abi/Integrity.json new file mode 100644 index 00000000..10a82957 --- /dev/null +++ b/sdk/abi/Integrity.json @@ -0,0 +1,113 @@ +[ + { + "inputs": [], + "name": "NotBFS", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "UnsuitableChildCount", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "UnsuitableChildTypeTree", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "UnsuitableCompValue", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "UnsuitableParameterType", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "UnsuitableParent", + "type": "error" + }, + { + "inputs": [], + "name": "UnsuitableRootNode", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "name": "UnsupportedOperator", + "type": "error" + }, + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "parent", + "type": "uint8" + }, + { + "internalType": "enum ParameterType", + "name": "paramType", + "type": "ParameterType" + }, + { + "internalType": "enum Operator", + "name": "operator", + "type": "Operator" + }, + { + "internalType": "bytes", + "name": "compValue", + "type": "bytes" + } + ], + "internalType": "struct ConditionFlat[]", + "name": "conditions", + "type": "tuple[]" + } + ], + "name": "enforce", + "outputs": [], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/sdk/abi/Packer.json b/sdk/abi/Packer.json new file mode 100644 index 00000000..4f9fa5ae --- /dev/null +++ b/sdk/abi/Packer.json @@ -0,0 +1,43 @@ +[ + { + "inputs": [ + { + "components": [ + { + "internalType": "uint8", + "name": "parent", + "type": "uint8" + }, + { + "internalType": "enum ParameterType", + "name": "paramType", + "type": "ParameterType" + }, + { + "internalType": "enum Operator", + "name": "operator", + "type": "Operator" + }, + { + "internalType": "bytes", + "name": "compValue", + "type": "bytes" + } + ], + "internalType": "struct ConditionFlat[]", + "name": "conditionsFlat", + "type": "tuple[]" + } + ], + "name": "pack", + "outputs": [ + { + "internalType": "bytes", + "name": "buffer", + "type": "bytes" + } + ], + "stateMutability": "pure", + "type": "function" + } +] diff --git a/sdk/abi/Roles.json b/sdk/abi/Roles.json index 475a7710..a44b9184 100644 --- a/sdk/abi/Roles.json +++ b/sdk/abi/Roles.json @@ -20,11 +20,75 @@ "stateMutability": "nonpayable", "type": "constructor" }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "AlreadyDisabledModule", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "AlreadyEnabledModule", + "type": "error" + }, { "inputs": [], "name": "ArraysDifferentLength", "type": "error" }, + { + "inputs": [], + "name": "CalldataOutOfBounds", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "enum PermissionChecker.Status", + "name": "status", + "type": "uint8" + }, + { + "internalType": "bytes32", + "name": "info", + "type": "bytes32" + } + ], + "name": "ConditionViolation", + "type": "error" + }, + { + "inputs": [], + "name": "FunctionSignatureTooShort", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "InvalidModule", + "type": "error" + }, + { + "inputs": [], + "name": "MalformedMultiEntrypoint", + "type": "error" + }, { "inputs": [], "name": "ModuleTransactionFailed", @@ -35,11 +99,94 @@ "name": "NoMembership", "type": "error" }, + { + "inputs": [ + { + "internalType": "address", + "name": "sender", + "type": "address" + } + ], + "name": "NotAuthorized", + "type": "error" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "guard_", + "type": "address" + } + ], + "name": "NotIERC165Compliant", + "type": "error" + }, { "inputs": [], - "name": "SetUpModulesAlreadyCalled", + "name": "SetupModulesAlreadyCalled", "type": "error" }, + { + "inputs": [], + "name": "UnsuitableMaxBalanceForAllowance", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "enum ExecutionOptions", + "name": "options", + "type": "uint8" + } + ], + "name": "AllowFunction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "enum ExecutionOptions", + "name": "options", + "type": "uint8" + } + ], + "name": "AllowTarget", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -51,9 +198,9 @@ }, { "indexed": false, - "internalType": "uint16[]", - "name": "roles", - "type": "uint16[]" + "internalType": "bytes32[]", + "name": "roleKeys", + "type": "bytes32[]" }, { "indexed": false, @@ -97,6 +244,31 @@ "name": "ChangedGuard", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "allowanceKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "consumed", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "newBalance", + "type": "uint128" + } + ], + "name": "ConsumeAllowance", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -123,6 +295,45 @@ "name": "EnabledModule", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleFailure", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "module", + "type": "address" + } + ], + "name": "ExecutionFromModuleSuccess", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -142,6 +353,50 @@ "name": "OwnershipTransferred", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + } + ], + "name": "RevokeFunction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "RevokeTarget", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -173,6 +428,127 @@ "name": "RolesModSetup", "type": "event" }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "components": [ + { + "internalType": "uint8", + "name": "parent", + "type": "uint8" + }, + { + "internalType": "enum ParameterType", + "name": "paramType", + "type": "uint8" + }, + { + "internalType": "enum Operator", + "name": "operator", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "compValue", + "type": "bytes" + } + ], + "indexed": false, + "internalType": "struct ConditionFlat[]", + "name": "conditions", + "type": "tuple[]" + }, + { + "indexed": false, + "internalType": "enum ExecutionOptions", + "name": "options", + "type": "uint8" + } + ], + "name": "ScopeFunction", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "address", + "name": "targetAddress", + "type": "address" + } + ], + "name": "ScopeTarget", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "bytes32", + "name": "allowanceKey", + "type": "bytes32" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "balance", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "maxBalance", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint128", + "name": "refillAmount", + "type": "uint128" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "refillInterval", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint64", + "name": "refillTimestamp", + "type": "uint64" + } + ], + "name": "SetAllowance", + "type": "event" + }, { "anonymous": false, "inputs": [ @@ -184,9 +560,9 @@ }, { "indexed": false, - "internalType": "uint16", - "name": "defaultRole", - "type": "uint16" + "internalType": "bytes32", + "name": "defaultRoleKey", + "type": "bytes32" } ], "name": "SetDefaultRole", @@ -198,11 +574,23 @@ { "indexed": false, "internalType": "address", - "name": "multisendAddress", + "name": "to", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "indexed": false, + "internalType": "contract ITransactionUnwrapper", + "name": "adapter", "type": "address" } ], - "name": "SetMultisendAddress", + "name": "SetUnwrapAdapter", "type": "event" }, { @@ -227,9 +615,37 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "targetAddress", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "internalType": "enum ExecutionOptions", + "name": "options", + "type": "uint8" + } + ], + "name": "allowFunction", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "address", @@ -247,6 +663,45 @@ "stateMutability": "nonpayable", "type": "function" }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "allowances", + "outputs": [ + { + "internalType": "uint128", + "name": "refillAmount", + "type": "uint128" + }, + { + "internalType": "uint128", + "name": "maxBalance", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "refillInterval", + "type": "uint64" + }, + { + "internalType": "uint128", + "name": "balance", + "type": "uint128" + }, + { + "internalType": "uint64", + "name": "refillTimestamp", + "type": "uint64" + } + ], + "stateMutability": "view", + "type": "function" + }, { "inputs": [ { @@ -255,9 +710,9 @@ "type": "address" }, { - "internalType": "uint16[]", - "name": "_roles", - "type": "uint16[]" + "internalType": "bytes32[]", + "name": "roleKeys", + "type": "bytes32[]" }, { "internalType": "bool[]", @@ -294,9 +749,9 @@ "name": "defaultRoles", "outputs": [ { - "internalType": "uint16", + "internalType": "bytes32", "name": "", - "type": "uint16" + "type": "bytes32" } ], "stateMutability": "view", @@ -394,12 +849,12 @@ "outputs": [ { "internalType": "bool", - "name": "", + "name": "success", "type": "bool" }, { "internalType": "bytes", - "name": "", + "name": "returnData", "type": "bytes" } ], @@ -429,9 +884,9 @@ "type": "uint8" }, { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "bool", @@ -473,9 +928,9 @@ "type": "uint8" }, { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "bool", @@ -573,19 +1028,6 @@ "stateMutability": "view", "type": "function" }, - { - "inputs": [], - "name": "multisend", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, { "inputs": [], "name": "owner", @@ -609,27 +1051,9 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" - }, - { - "internalType": "address", - "name": "targetAddress", - "type": "address" - } - ], - "name": "revokeTarget", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "address", @@ -638,16 +1062,11 @@ }, { "internalType": "bytes4", - "name": "functionSig", + "name": "selector", "type": "bytes4" - }, - { - "internalType": "enum ExecutionOptions", - "name": "options", - "type": "uint8" } ], - "name": "scopeAllowFunction", + "name": "revokeFunction", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -655,47 +1074,17 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "address", "name": "targetAddress", "type": "address" - }, - { - "internalType": "bytes4", - "name": "functionSig", - "type": "bytes4" - }, - { - "internalType": "bool[]", - "name": "isParamScoped", - "type": "bool[]" - }, - { - "internalType": "enum ParameterType[]", - "name": "paramType", - "type": "uint8[]" - }, - { - "internalType": "enum Comparison[]", - "name": "paramComp", - "type": "uint8[]" - }, - { - "internalType": "bytes[]", - "name": "compValue", - "type": "bytes[]" - }, - { - "internalType": "enum ExecutionOptions", - "name": "options", - "type": "uint8" } ], - "name": "scopeFunction", + "name": "revokeTarget", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -703,9 +1092,9 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "address", @@ -714,16 +1103,43 @@ }, { "internalType": "bytes4", - "name": "functionSig", + "name": "selector", "type": "bytes4" }, + { + "components": [ + { + "internalType": "uint8", + "name": "parent", + "type": "uint8" + }, + { + "internalType": "enum ParameterType", + "name": "paramType", + "type": "uint8" + }, + { + "internalType": "enum Operator", + "name": "operator", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "compValue", + "type": "bytes" + } + ], + "internalType": "struct ConditionFlat[]", + "name": "conditions", + "type": "tuple[]" + }, { "internalType": "enum ExecutionOptions", "name": "options", "type": "uint8" } ], - "name": "scopeFunctionExecutionOptions", + "name": "scopeFunction", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -731,42 +1147,17 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" }, { "internalType": "address", "name": "targetAddress", "type": "address" - }, - { - "internalType": "bytes4", - "name": "functionSig", - "type": "bytes4" - }, - { - "internalType": "uint256", - "name": "paramIndex", - "type": "uint256" - }, - { - "internalType": "enum ParameterType", - "name": "paramType", - "type": "uint8" - }, - { - "internalType": "enum Comparison", - "name": "paramComp", - "type": "uint8" - }, - { - "internalType": "bytes", - "name": "compValue", - "type": "bytes" } ], - "name": "scopeParameter", + "name": "scopeTarget", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -774,78 +1165,37 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "key", + "type": "bytes32" }, { - "internalType": "address", - "name": "targetAddress", - "type": "address" + "internalType": "uint128", + "name": "balance", + "type": "uint128" }, { - "internalType": "bytes4", - "name": "functionSig", - "type": "bytes4" + "internalType": "uint128", + "name": "maxBalance", + "type": "uint128" }, { - "internalType": "uint256", - "name": "paramIndex", - "type": "uint256" + "internalType": "uint128", + "name": "refillAmount", + "type": "uint128" }, { - "internalType": "enum ParameterType", - "name": "paramType", - "type": "uint8" + "internalType": "uint64", + "name": "refillInterval", + "type": "uint64" }, { - "internalType": "bytes[]", - "name": "compValues", - "type": "bytes[]" + "internalType": "uint64", + "name": "refillTimestamp", + "type": "uint64" } ], - "name": "scopeParameterAsOneOf", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "role", - "type": "uint16" - }, - { - "internalType": "address", - "name": "targetAddress", - "type": "address" - }, - { - "internalType": "bytes4", - "name": "functionSig", - "type": "bytes4" - } - ], - "name": "scopeRevokeFunction", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint16", - "name": "role", - "type": "uint16" - }, - { - "internalType": "address", - "name": "targetAddress", - "type": "address" - } - ], - "name": "scopeTarget", + "name": "setAllowance", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -871,9 +1221,9 @@ "type": "address" }, { - "internalType": "uint16", - "name": "role", - "type": "uint16" + "internalType": "bytes32", + "name": "roleKey", + "type": "bytes32" } ], "name": "setDefaultRole", @@ -898,11 +1248,11 @@ "inputs": [ { "internalType": "address", - "name": "_multisend", + "name": "_target", "type": "address" } ], - "name": "setMultisend", + "name": "setTarget", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -911,11 +1261,21 @@ "inputs": [ { "internalType": "address", - "name": "_target", + "name": "to", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "selector", + "type": "bytes4" + }, + { + "internalType": "contract ITransactionUnwrapper", + "name": "adapter", "type": "address" } ], - "name": "setTarget", + "name": "setTransactionUnwrapper", "outputs": [], "stateMutability": "nonpayable", "type": "function" @@ -962,29 +1322,20 @@ { "inputs": [ { - "internalType": "uint16", - "name": "role", - "type": "uint16" - }, + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "name": "unwrappers", + "outputs": [ { - "internalType": "address", - "name": "targetAddress", + "internalType": "contract ITransactionUnwrapper", + "name": "", "type": "address" - }, - { - "internalType": "bytes4", - "name": "functionSig", - "type": "bytes4" - }, - { - "internalType": "uint8", - "name": "paramIndex", - "type": "uint8" } ], - "name": "unscopeParameter", - "outputs": [], - "stateMutability": "nonpayable", + "stateMutability": "view", "type": "function" } ] diff --git a/sdk/contracts.ts b/sdk/contracts.ts index 696554fb..a1f095d8 100644 --- a/sdk/contracts.ts +++ b/sdk/contracts.ts @@ -7,11 +7,13 @@ import Erc20VotesAbi from "./abi/Erc20Votes.json"; import Erc721VotesAbi from "./abi/Erc721Votes.json"; import ExitErc20Abi from "./abi/ExitErc20.json"; import ExitErc721Abi from "./abi/ExitErc721.json"; +import IntegrityAbi from "./abi/Integrity.json"; import MetaGuardAbi from "./abi/MetaGuard.json"; import ModuleProxyFactoryAbi from "./abi/ModuleProxyFactory.json"; import MultisendEncoderAbi from "./abi/MultisendEncoder.json"; import OptimisticGovernorAbi from "./abi/OptimisticGovernor.json"; import OzGovernorAbi from "./abi/OzGovernor.json"; +import PackerAbi from "./abi/Packer.json"; import PermissionsAbi from "./abi/Permissions.json"; import RealityErc20Abi from "./abi/RealityErc20.json"; import RealityEthAbi from "./abi/RealityEth.json"; @@ -30,9 +32,11 @@ import * as Erc20VotesInitData from "./initData/Erc20Votes"; import * as Erc721VotesInitData from "./initData/Erc721Votes"; import * as ExitErc20InitData from "./initData/ExitErc20"; import * as ExitErc721InitData from "./initData/ExitErc721"; +import * as IntegrityInitData from "./initData/Integrity"; import * as ModuleProxyFactoryInitData from "./initData/ModuleProxyFactory"; import * as MultisendEncoderInitData from "./initData/MultisendEncoder"; import * as OzGovernorInitData from "./initData/OzGovernor"; +import * as PackerInitData from "./initData/Packer"; import * as PermissionsInitData from "./initData/Permissions"; import * as RealityErc20InitData from "./initData/RealityErc20"; import * as RealityEthInitData from "./initData/RealityEth"; @@ -108,6 +112,7 @@ const CanonicalAddresses: Record< [KnownContracts.ROLES]: { "1.0.0": "0x85388a8cd772b19a468F982Dc264C238856939C9", "1.1.0": "0xD8DfC1d938D7D163C5231688341e9635E9011889", + "2.0.0": "0xb8bB41FA7E5e64452DBCA1C8A0e7058D43abAf4f", }, [KnownContracts.PERMISSIONS]: { "1.0.0": "0x33D1C5A5B6a7f3885c7467e829aaa21698937597", @@ -133,6 +138,12 @@ const CanonicalAddresses: Record< [KnownContracts.CONNEXT]: { "1.0.0": "0x7dE07b9De0bf0FABf31A188DE1527034b2aF36dB", }, + [KnownContracts.PACKER]: { + "2.0.0": "0x60E89c71882e88f16772490d2f05819d9521EAb1", + }, + [KnownContracts.INTEGRITY]: { + "2.0.0": "0x52c342e002C5F7CF14Ef89b5e04Cf6D53c7F8e72", + }, }; /** @@ -236,6 +247,8 @@ export const ContractAbis: Record = { [KnownContracts.MULTISEND_ENCODER]: MultisendEncoderAbi, [KnownContracts.PERMISSIONS]: PermissionsAbi, [KnownContracts.CONNEXT]: ConnextAbi, + [KnownContracts.PACKER]: PackerAbi, + [KnownContracts.INTEGRITY]: IntegrityAbi, }; export const ContractFactories = { @@ -261,6 +274,8 @@ export const ContractFactories = { [KnownContracts.MULTISEND_ENCODER]: factories.MultisendEncoder__factory, [KnownContracts.PERMISSIONS]: factories.Permissions__factory, [KnownContracts.CONNEXT]: factories.Connext__factory, + [KnownContracts.PACKER]: factories.Packer__factory, + [KnownContracts.INTEGRITY]: factories.Integrity__factory, }; export const MasterCopyInitData: Record< @@ -287,4 +302,6 @@ export const MasterCopyInitData: Record< [KnownContracts.MULTISEND_ENCODER]: MultisendEncoderInitData, [KnownContracts.PERMISSIONS]: PermissionsInitData, [KnownContracts.CONNEXT]: ConnextInitData, + [KnownContracts.PACKER]: PackerInitData, + [KnownContracts.INTEGRITY]: IntegrityInitData, }; diff --git a/sdk/factory/types.ts b/sdk/factory/types.ts index 47dc726f..1cc9c286 100644 --- a/sdk/factory/types.ts +++ b/sdk/factory/types.ts @@ -41,6 +41,8 @@ export enum KnownContracts { MULTISEND_ENCODER = "multisendEncoder", PERMISSIONS = "permissions", CONNEXT = "connext", + PACKER = "packer", + INTEGRITY = "integrity", } // type META_GUARD_VERSION = "v1.0.0"; diff --git a/sdk/initData/Integrity.ts b/sdk/initData/Integrity.ts new file mode 100644 index 00000000..b8efe9d2 --- /dev/null +++ b/sdk/initData/Integrity.ts @@ -0,0 +1,4 @@ +export const salt = + "0x0000000000000000000000000000000000000000000000000000000000000000"; +export const initCode = + "0x61158261003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063783a90471461003a575b600080fd5b61004d6100483660046112e9565b61004f565b005b610058816100a4565b60005b81518110156100975761008782828151811061007957610079611425565b602002602001015182610149565b61009081611451565b905061005b565b506100a181610668565b50565b6000805b82518110156100f457808382815181106100c4576100c4611425565b60200260200101516000015160ff16036100e4576100e182611451565b91505b6100ed81611451565b90506100a8565b5080600114158061012757508160008151811061011357610113611425565b60200260200101516000015160ff16600014155b1561014557604051632f48858160e21b815260040160405180910390fd5b5050565b604082015160208301516060840151600083601f81111561016c5761016c61146a565b036101a2576060850151511561019d57604051632d6ee65d60e21b8152600481018590526024015b60405180910390fd5b610661565b600183601f8111156101b6576101b661146a565b101580156101d65750600383601f8111156101d3576101d361146a565b11155b156102375760008260058111156101ef576101ef61146a565b146102105760405163de10075b60e01b815260048101859052602401610194565b6060850151511561019d57604051632d6ee65d60e21b815260048101859052602401610194565b600583601f81111561024b5761024b61146a565b036102e65760038260058111156102645761026461146a565b14158015610284575060048260058111156102815761028161146a565b14155b80156102a25750600582600581111561029f5761029f61146a565b14155b156102c35760405163de10075b60e01b815260048101859052602401610194565b80511561019d57604051632d6ee65d60e21b815260048101859052602401610194565b600683601f8111156102fa576102fa61146a565b14806103175750600783601f8111156103155761031561146a565b145b806103335750600883601f8111156103315761033161146a565b145b1561036e5760045b82600581111561034d5761034d61146a565b146102c35760405163de10075b60e01b815260048101859052602401610194565b600f83601f8111156103825761038261146a565b0361038e57600161033b565b601083601f8111156103a2576103a261146a565b036104735760018260058111156103bb576103bb61146a565b141580156103db575060028260058111156103d8576103d861146a565b14155b80156103f9575060038260058111156103f6576103f661146a565b14155b8015610417575060048260058111156104145761041461146a565b14155b156104385760405163de10075b60e01b815260048101859052602401610194565b8051158061045257506020815161044f9190611480565b15155b1561019d57604051632d6ee65d60e21b815260048101859052602401610194565b601183601f8111156104875761048761146a565b14806104a45750601283601f8111156104a2576104a261146a565b145b806104c05750601383601f8111156104be576104be61146a565b145b806104dc5750601483601f8111156104da576104da61146a565b145b1561053c5760015b8260058111156104f6576104f661146a565b146105175760405163de10075b60e01b815260048101859052602401610194565b805160201461019d57604051632d6ee65d60e21b815260048101859052602401610194565b601583601f8111156105505761055061146a565b036105aa5760018260058111156105695761056961146a565b14158015610589575060028260058111156105865761058661146a565b14155b156105175760405163de10075b60e01b815260048101859052602401610194565b601683601f8111156105be576105be61146a565b036105e857805160201461019d57604051632d6ee65d60e21b815260048101859052602401610194565b601c83601f8111156105fc576105fc61146a565b036106085760016104e4565b601d83601f81111561061c5761061c61146a565b14806106395750601e83601f8111156106375761063761146a565b145b156106455760006104e4565b604051630a7d7b8960e41b815260048101859052602401610194565b5050505050565b805160015b818110156106f25782818151811061068757610687611425565b60200260200101516000015160ff16836001836106a491906114a2565b815181106106b4576106b4611425565b60200260200101516000015160ff1611156106e257604051638484738160e01b815260040160405180910390fd5b6106eb81611451565b905061066d565b5060005b818110156107f557601d83828151811061071257610712611425565b602002602001015160400151601f81111561072f5761072f61146a565b14806107695750601e83828151811061074a5761074a611425565b602002602001015160400151601f8111156107675761076761146a565b145b80156107c4575060058384838151811061078557610785611425565b60200260200101516000015160ff16815181106107a4576107a4611425565b60200260200101516020015160058111156107c1576107c161146a565b14155b156107e557604051631d40413960e11b815260048101829052602401610194565b6107ee81611451565b90506106f6565b50600061080183610c60565b905060005b8351811015610b3257600084828151811061082357610823611425565b60200260200101519050600083838151811061084157610841611425565b602002602001015190506000600581111561085e5761085e61146a565b826020015160058111156108745761087461146a565b0361095057601d8260400151601f8111156108915761089161146a565b14806108b25750601e8260400151601f8111156108b0576108b061146a565b145b80156108c15750604081015115155b156108e25760405163f3379ddd60e01b815260048101849052602401610194565b60018260400151601f8111156108fa576108fa61146a565b1015801561091e575060038260400151601f81111561091b5761091b61146a565b11155b1561094b57806040015160000361094b5760405163f3379ddd60e01b815260048101849052602401610194565b610b1d565b6001826020015160058111156109685761096861146a565b148061098957506002826020015160058111156109875761098761146a565b145b156109b45760408101511561094b5760405163f3379ddd60e01b815260048101849052602401610194565b6003826020015160058111156109cc576109cc61146a565b14806109ed57506005826020015160058111156109eb576109eb61146a565b145b15610a1a57806040015160000361094b5760405163f3379ddd60e01b815260048101849052602401610194565b600482602001516005811115610a3257610a3261146a565b14610a3f57610a3f6114bb565b8060400151600003610a675760405163f3379ddd60e01b815260048101849052602401610194565b60068260400151601f811115610a7f57610a7f61146a565b1480610aa0575060078260400151601f811115610a9e57610a9e61146a565b145b8015610ab157508060400151600114155b15610ad25760405163f3379ddd60e01b815260048101849052602401610194565b60088260400151601f811115610aea57610aea61146a565b148015610afc57506101008160400151115b15610b1d5760405163f3379ddd60e01b815260048101849052602401610194565b50508080610b2a90611451565b915050610806565b5060005b8351811015610c16576000848281518110610b5357610b53611425565b602002602001015190506001601f811115610b7057610b7061146a565b8160400151601f811115610b8657610b8661146a565b10158015610baa575060038160400151601f811115610ba757610ba761146a565b11155b80610bca5750600481602001516005811115610bc857610bc861146a565b145b8015610bf357506001838381518110610be557610be5611425565b602002602001015160400151115b15610c0357610c03858385610db5565b5080610c0e81611451565b915050610b36565b506000610c2584600084610e71565b9050600581516005811115610c3c57610c3c61146a565b14610c5a57604051632f48858160e21b815260040160405180910390fd5b50505050565b805160609080610c7257610c726114bb565b806001600160401b03811115610c8a57610c8a6111f8565b604051908082528060200260200182016040528015610cdf57816020015b610ccc60405180606001604052806000815260200160008152602001600081525090565b815260200190600190039081610ca85790505b50915060001982600081518110610cf857610cf8611425565b60209081029190910101515260015b81811015610dae57600019838281518110610d2457610d24611425565b60200260200101516000018181525050600083858381518110610d4957610d49611425565b60200260200101516000015160ff1681518110610d6857610d68611425565b60200260200101519050600019816000015103610d83578181525b610d8e8260016114d1565b602082018190528151610da0916114a2565b604090910152600101610d07565b5050919050565b6000818381518110610dc957610dc9611425565b60200260200101516000015190506000828481518110610deb57610deb611425565b60200260200101516020015190506000610e0e610e09878587610e71565b6110f9565b90506000610e1d8460016114d1565b90505b82811015610e6857610e36610e09888388610e71565b8214610e58576040516303a3183b60e61b815260048101879052602401610194565b610e6181611451565b9050610e20565b50505050505050565b6040805180820190915260008152606060208201526000848481518110610e9a57610e9a611425565b602002602001015190506001601f811115610eb757610eb761146a565b8160400151601f811115610ecd57610ecd61146a565b10158015610ef1575060038160400151601f811115610eee57610eee61146a565b11155b15610f53576000838581518110610f0a57610f0a611425565b60200260200101516040015111610f2357610f236114bb565b610f4b85848681518110610f3957610f39611425565b60200260200101516000015185610e71565b9150506110f2565b602081015182906005811115610f6b57610f6b61146a565b90816005811115610f7e57610f7e61146a565b815250506000838581518110610f9657610f96611425565b60200260200101516040015111156110f0576000838581518110610fbc57610fbc611425565b60209081029190910101515190506000600483602001516005811115610fe457610fe461146a565b1461100c57848681518110610ffb57610ffb611425565b602002602001015160200151611036565b84868151811061101e5761101e611425565b602002602001015160000151600161103691906114d1565b905061104282826114a2565b6001600160401b03811115611059576110596111f8565b60405190808252806020026020018201604052801561109f57816020015b6040805180820190915260008152606060208201528152602001906001900390816110775790505b506020850152815b818110156110ec576110ba888288610e71565b60208601516110c985846114a2565b815181106110d9576110d9611425565b60209081029190910101526001016110a7565b5050505b505b9392505050565b60208101515160009080156111e55760008360200151516001600160401b03811115611127576111276111f8565b604051908082528060200260200182016040528015611150578160200160208202803683370190505b50905060005b828110156111b1576111848560200151828151811061117757611177611425565b60200260200101516110f9565b82828151811061119657611196611425565b60209081029190910101526111aa81611451565b9050611156565b5083516040516111c6919083906020016114e4565b6040516020818303038152906040528051906020012092505050919050565b825160058111156110f2576110f261146a565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715611230576112306111f8565b60405290565b604051601f8201601f191681016001600160401b038111828210171561125e5761125e6111f8565b604052919050565b80356020811061127557600080fd5b919050565b600082601f83011261128b57600080fd5b81356001600160401b038111156112a4576112a46111f8565b6112b7601f8201601f1916602001611236565b8181528460208386010111156112cc57600080fd5b816020850160208301376000918101602001919091529392505050565b600060208083850312156112fc57600080fd5b82356001600160401b038082111561131357600080fd5b818501915085601f83011261132757600080fd5b813581811115611339576113396111f8565b8060051b611348858201611236565b918252838101850191858101908984111561136257600080fd5b86860192505b83831015611418578235858111156113805760008081fd5b86016080818c03601f19018113156113985760008081fd5b6113a061120e565b8983013560ff811681146113b45760008081fd5b8152604083810135600681106113ca5760008081fd5b828c015260606113db858201611266565b838301529284013592898411156113f457600091508182fd5b6114028f8d8688010161127a565b9083015250845250509186019190860190611368565b9998505050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600182016114635761146361143b565b5060010190565b634e487b7160e01b600052602160045260246000fd5b60008261149d57634e487b7160e01b600052601260045260246000fd5b500690565b818103818111156114b5576114b561143b565b92915050565b634e487b7160e01b600052600160045260246000fd5b808201808211156114b5576114b561143b565b60006006841061150457634e487b7160e01b600052602160045260246000fd5b8360f81b82526001602d60f81b81840152600283018451602080870160005b8381101561153e578151855293820193908201908501611523565b50929897505050505050505056fea26469706673582212205e423fe1cd2426ef0d204ceda9a655789cef527fab3317eedbc793021f419fef64736f6c63430008110033"; diff --git a/sdk/initData/Packer.ts b/sdk/initData/Packer.ts new file mode 100644 index 00000000..f487bd26 --- /dev/null +++ b/sdk/initData/Packer.ts @@ -0,0 +1,4 @@ +export const salt = + "0x0000000000000000000000000000000000000000000000000000000000000000"; +export const initCode = + "0x61086d61003a600b82828239805160001a60731461002d57634e487b7160e01b600052600060045260246000fd5b30600052607381538281f3fe73000000000000000000000000000000000000000030146080604052600436106100355760003560e01c8063806362d21461003a575b600080fd5b61004d610048366004610600565b610063565b60405161005a919061073d565b60405180910390f35b606061006e82610188565b6100778261024d565b67ffffffffffffffff81111561008f5761008f61050c565b6040519080825280601f01601f1916602001820160405280156100b9576020820181803683370190505b50825190915060006100cc8260026107a1565b6100d79060206107b8565b905060005b828110156101805761010884828784815181106100fb576100fb6107cb565b60200260200101516102c5565b601085828151811061011c5761011c6107cb565b602002602001015160400151601f811115610139576101396107e1565b10610170576101628483878481518110610155576101556107cb565b6020026020010151610375565b61016d6020836107b8565b91505b610179816107f7565b90506100dc565b505050919050565b805160005b818110156102485760108382815181106101a9576101a96107cb565b602002602001015160400151601f8111156101c6576101c66107e1565b1480156101da57506101d883826103c0565b155b156102385760008382815181106101f3576101f36107cb565b602002602001015160600151905060008151905060208201915060208103825281858481518110610226576102266107cb565b60200260200101516060018190525050505b610241816107f7565b905061018d565b505050565b805160009061025d6002826107a1565b915060005b818110156102be57601084828151811061027e5761027e6107cb565b602002602001015160400151601f81111561029b5761029b6107e1565b106102ae576102ab6020846107b8565b92505b6102b7816107f7565b9050610262565b5050919050565b60006102d26002846107a1565b9050816000015160f81b8482815181106102ee576102ee6107cb565b60200101906001600160f81b031916908160001a9053508160400151601f81111561031b5761031b6107e1565b602083015160059081811115610333576103336107e1565b60ff16901b1760f81b846103488360016107b8565b81518110610358576103586107cb565b60200101906001600160f81b031916908160001a90535050505050565b600060108260400151601f81111561038f5761038f6107e1565b146103a75781606001516103a290610810565b6103b4565b8160600151805190602001205b93909201929092525050565b6000808383815181106103d5576103d56107cb565b6020026020010151602001519050600160058111156103f6576103f66107e1565b816005811115610408576104086107e1565b03610417576001915050610506565b600281600581111561042b5761042b6107e1565b148061044857506004816005811115610446576104466107e1565b145b8061046457506005816005811115610462576104626107e1565b145b15610473576000915050610506565b835160006104828560016107b8565b90505b818110156104fe5760008682815181106104a1576104a16107cb565b6020026020010151600001519050858160ff1610156104c057506104ee565b858160ff1611156104d157506104fe565b6104db87836103c0565b6104ec576000945050505050610506565b505b6104f7816107f7565b9050610485565b506001925050505b92915050565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156105455761054561050c565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156105745761057461050c565b604052919050565b80356020811061058b57600080fd5b919050565b600082601f8301126105a157600080fd5b813567ffffffffffffffff8111156105bb576105bb61050c565b6105ce601f8201601f191660200161054b565b8181528460208386010111156105e357600080fd5b816020850160208301376000918101602001919091529392505050565b6000602080838503121561061357600080fd5b823567ffffffffffffffff8082111561062b57600080fd5b818501915085601f83011261063f57600080fd5b8135818111156106515761065161050c565b8060051b61066085820161054b565b918252838101850191858101908984111561067a57600080fd5b86860192505b83831015610730578235858111156106985760008081fd5b86016080818c03601f19018113156106b05760008081fd5b6106b8610522565b8983013560ff811681146106cc5760008081fd5b8152604083810135600681106106e25760008081fd5b828c015260606106f385820161057c565b8383015292840135928984111561070c57600091508182fd5b61071a8f8d86880101610590565b9083015250845250509186019190860190610680565b9998505050505050505050565b600060208083528351808285015260005b8181101561076a5785810183015185820160400152820161074e565b506000604082860101526040601f19601f8301168501019250505092915050565b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176105065761050661078b565b808201808211156105065761050661078b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052602160045260246000fd5b6000600182016108095761080961078b565b5060010190565b80516020808301519190811015610831576000198160200360031b1b821691505b5091905056fea26469706673582212204b6c5106cb5ade5f561523db757ff19a0809413e33e2d1b18ef196c044c32bbb64736f6c63430008110033"; diff --git a/sdk/initData/Roles.ts b/sdk/initData/Roles.ts index 836e5ee6..cc32133d 100644 --- a/sdk/initData/Roles.ts +++ b/sdk/initData/Roles.ts @@ -1,4 +1,4 @@ export const salt = "0x0000000000000000000000000000000000000000000000000000000000000000"; export const initCode = - "0x60806040523480156200001157600080fd5b5060405162006aa738038062006aa7833981810160405281019062000037919062000892565b6000838383604051602001620000509392919062000991565b604051602081830303815290604052905062000072816200007c60201b60201c565b5050505062000b8d565b60008060008380602001905181019062000097919062000836565b925092509250620000ad620001d460201b60201c565b81606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200014083620002d360201b60201c565b62000150620003e960201b60201c565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f34d3b96a088381c6843a1f9d94d251afa88f83cc7a0d17fc23a7057506a3fc6d84604051620001c6919062000974565b60405180910390a450505050565b600060019054906101000a900460ff1680620001fb575060008054906101000a900460ff16155b6200023d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200023490620009f0565b60405180910390fd5b60008060019054906101000a900460ff1615905080156200028e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b6200029e6200053260201b60201c565b620002ae6200061160201b60201c565b8015620002d05760008060016101000a81548160ff0219169083151502179055505b50565b620002e36200071060201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003096200071860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000362576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003599062000a12565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415620003d5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003cc90620009ce565b60405180910390fd5b620003e6816200074260201b60201c565b50565b600073ffffffffffffffffffffffffffffffffffffffff1660686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614620004b0576040517ff736703400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900460ff168062000559575060008054906101000a900460ff16155b6200059b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200059290620009f0565b60405180910390fd5b60008060019054906101000a900460ff161590508015620005ec576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156200060e5760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff168062000638575060008054906101000a900460ff16155b6200067a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200067190620009f0565b60405180910390fd5b60008060019054906101000a900460ff161590508015620006cb576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b620006eb620006df6200071060201b60201c565b6200074260201b60201c565b80156200070d5760008060016101000a81548160ff0219169083151502179055505b50565b600033905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081519050620008198162000b59565b92915050565b600081519050620008308162000b73565b92915050565b60008060006060848603121562000852576200085162000a8d565b5b600062000862868287016200081f565b935050602062000875868287016200081f565b925050604062000888868287016200081f565b9150509250925092565b600080600060608486031215620008ae57620008ad62000a8d565b5b6000620008be8682870162000808565b9350506020620008d18682870162000808565b9250506040620008e48682870162000808565b9150509250925092565b620008f98162000a45565b82525050565b60006200090e60268362000a34565b91506200091b8262000a92565b604082019050919050565b600062000935602e8362000a34565b9150620009428262000ae1565b604082019050919050565b60006200095c60208362000a34565b9150620009698262000b30565b602082019050919050565b60006020820190506200098b6000830184620008ee565b92915050565b6000606082019050620009a86000830186620008ee565b620009b76020830185620008ee565b620009c66040830184620008ee565b949350505050565b60006020820190508181036000830152620009e981620008ff565b9050919050565b6000602082019050818103600083015262000a0b8162000926565b9050919050565b6000602082019050818103600083015262000a2d816200094d565b9050919050565b600082825260208201905092915050565b600062000a528262000a6d565b9050919050565b600062000a668262000a6d565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600080fd5b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b62000b648162000a45565b811462000b7057600080fd5b50565b62000b7e8162000a59565b811462000b8a57600080fd5b50565b615f0a8062000b9d6000396000f3fe608060405234801561001057600080fd5b50600436106102065760003560e01c8063610b59251161011a578063a4f9edbf116100ad578063cc2f84521161007c578063cc2f8452146105a9578063d4b83992146105da578063e009cfde146105f8578063e19a9dd914610614578063f2fde38b1461063057610206565b8063a4f9edbf14610522578063a6edf38f1461053e578063b0c199121461055a578063c91063891461058b57610206565b80637ceab3b1116100e95780637ceab3b1146104ae5780638b95eccd146104cc5780638da5cb5b146104e8578063939337721461050657610206565b8063610b59251461043c5780636928e74b14610458578063715018a614610488578063776d1a011461049257610206565b80632e506a481161019d578063468721a71161016c578063468721a71461038557806351fa1d73146103b55780635229073f146103d15780635aef7de6146104025780635e8266951461042057610206565b80632e506a48146103155780632fcf52d11461033157806333a0480c1461034d5780633c1952b81461036957610206565b80632933ef1c116101d95780632933ef1c1461027b578063294402cc146102975780632d3c2547146102b55780632d9ad53d146102e557610206565b8063086cfca81461020b5780630de729c714610227578063102b7fe61461024357806315b77d3f1461025f575b600080fd5b61022560048036038101906102209190613f5e565b61064c565b005b610241600480360381019061023c919061479c565b61078e565b005b61025d600480360381019061025891906140b3565b610896565b005b6102796004803603810190610274919061455d565b6109a9565b005b610295600480360381019061029091906143d6565b610ab4565b005b61029f610bbc565b6040516102ac9190614f16565b60405180910390f35b6102cf60048036038101906102ca9190613f5e565b610be2565b6040516102dc91906155e6565b60405180910390f35b6102ff60048036038101906102fa9190613f5e565b610c03565b60405161030c91906150d8565b60405180910390f35b61032f600480360381019061032a9190614735565b610cd5565b005b61034b6004803603810190610346919061455d565b610de0565b005b61036760048036038101906103629190614429565b610eeb565b005b610383600480360381019061037e9190614673565b61100b565b005b61039f600480360381019061039a9190614133565b611122565b6040516103ac91906150d8565b60405180910390f35b6103cf60048036038101906103ca9190614396565b611349565b005b6103eb60048036038101906103e69190614133565b61144e565b6040516103f99291906150f3565b60405180910390f35b61040a61167b565b6040516104179190614f16565b60405180910390f35b61043a60048036038101906104359190614396565b6116a1565b005b61045660048036038101906104519190613f5e565b6117a6565b005b610472600480360381019061046d91906141bb565b611b30565b60405161047f91906150d8565b60405180910390f35b610490611d4e565b005b6104ac60048036038101906104a79190613f5e565b611dd6565b005b6104b6611f18565b6040516104c39190614f16565b60405180910390f35b6104e660048036038101906104e19190613f5e565b611f3e565b005b6104f0612057565b6040516104fd9190614f16565b60405180910390f35b610520600480360381019061051b91906145c4565b612081565b005b61053c60048036038101906105379190614320565b612195565b005b6105586004803603810190610553919061401e565b6122d1565b005b610574600480360381019061056f91906141bb565b6124d8565b6040516105829291906150f3565b60405180910390f35b610593612700565b6040516105a09190614f16565b60405180910390f35b6105c360048036038101906105be91906140f3565b61272a565b6040516105d19291906150a8565b60405180910390f35b6105e261292b565b6040516105ef9190614f16565b60405180910390f35b610612600480360381019061060d9190613fde565b612951565b005b61062e60048036038101906106299190613f5e565b612cda565b005b61064a60048036038101906106459190613f5e565b612f10565b005b610654613008565b73ffffffffffffffffffffffffffffffffffffffff16610672612057565b73ffffffffffffffffffffffffffffffffffffffff16146106c8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bf906151c7565b60405180910390fd5b6000606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34260405160405180910390a35050565b610796613008565b73ffffffffffffffffffffffffffffffffffffffff166107b4612057565b73ffffffffffffffffffffffffffffffffffffffff161461080a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610801906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763a2f6f6d0606b60008661ffff1661ffff1681526020019081526020016000208585856040518563ffffffff1660e01b815260040161086194939291906155a1565b60006040518083038186803b15801561087957600080fd5b505af415801561088d573d6000803e3d6000fd5b50505050505050565b61089e613008565b73ffffffffffffffffffffffffffffffffffffffff166108bc612057565b73ffffffffffffffffffffffffffffffffffffffff1614610912576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610909906151c7565b60405180910390fd5b80606a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548161ffff021916908361ffff1602179055507f197e61bb67ba4b0f657afcb5d2dbed385d50b697c51090f466cdbcc4c30a21ce828260405161099d929190614f7a565b60405180910390a15050565b6109b1613008565b73ffffffffffffffffffffffffffffffffffffffff166109cf612057565b73ffffffffffffffffffffffffffffffffffffffff1614610a25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a1c906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763163592dd606b60008761ffff1661ffff168152602001908152602001600020868686866040518663ffffffff1660e01b8152600401610a7e9594939291906153fc565b60006040518083038186803b158015610a9657600080fd5b505af4158015610aaa573d6000803e3d6000fd5b5050505050505050565b610abc613008565b73ffffffffffffffffffffffffffffffffffffffff16610ada612057565b73ffffffffffffffffffffffffffffffffffffffff1614610b30576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b27906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa216989375976377cff804606b60008661ffff1661ffff1681526020019081526020016000208585856040518563ffffffff1660e01b8152600401610b879493929190615308565b60006040518083038186803b158015610b9f57600080fd5b505af4158015610bb3573d6000803e3d6000fd5b50505050505050565b606960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606a6020528060005260406000206000915054906101000a900461ffff1681565b60008173ffffffffffffffffffffffffffffffffffffffff16600173ffffffffffffffffffffffffffffffffffffffff1614158015610cce5750600073ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614155b9050919050565b610cdd613008565b73ffffffffffffffffffffffffffffffffffffffff16610cfb612057565b73ffffffffffffffffffffffffffffffffffffffff1614610d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d48906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa21698937597633c5a24e2606b60008761ffff1661ffff168152602001908152602001600020868686866040518663ffffffff1660e01b8152600401610daa95949392919061554e565b60006040518083038186803b158015610dc257600080fd5b505af4158015610dd6573d6000803e3d6000fd5b5050505050505050565b610de8613008565b73ffffffffffffffffffffffffffffffffffffffff16610e06612057565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e53906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa21698937597635ebbaa68606b60008761ffff1661ffff168152602001908152602001600020868686866040518663ffffffff1660e01b8152600401610eb59594939291906153fc565b60006040518083038186803b158015610ecd57600080fd5b505af4158015610ee1573d6000803e3d6000fd5b5050505050505050565b610ef3613008565b73ffffffffffffffffffffffffffffffffffffffff16610f11612057565b73ffffffffffffffffffffffffffffffffffffffff1614610f67576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5e906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa21698937597632af6aecb606b60008e61ffff1661ffff1681526020019081526020016000208d8d8d8d8d8d8d8d8d8d8d6040518d63ffffffff1660e01b8152600401610fce9c9b9a9998979695949392919061534d565b60006040518083038186803b158015610fe657600080fd5b505af4158015610ffa573d6000803e3d6000fd5b505050505050505050505050505050565b611013613008565b73ffffffffffffffffffffffffffffffffffffffff16611031612057565b73ffffffffffffffffffffffffffffffffffffffff1614611087576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107e906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763edf909e3606b60008b61ffff1661ffff1681526020019081526020016000208a8a8a8a8a8a8a8a6040518a63ffffffff1660e01b81526004016110e8999897969594939291906154c7565b60006040518083038186803b15801561110057600080fd5b505af4158015611114573d6000803e3d6000fd5b505050505050505050505050565b60008073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156111f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e9906151e7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763db50e575606b6000606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020606960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1689898989896040518863ffffffff1660e01b81526004016112be9796959493929190615267565b60006040518083038186803b1580156112d657600080fd5b505af41580156112ea573d6000803e3d6000fd5b5050505061133e868686868080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505085613010565b905095945050505050565b611351613008565b73ffffffffffffffffffffffffffffffffffffffff1661136f612057565b73ffffffffffffffffffffffffffffffffffffffff16146113c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113bc906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763cfe4317a606b60008561ffff1661ffff16815260200190815260200160002084846040518463ffffffff1660e01b815260040161141a939291906152d1565b60006040518083038186803b15801561143257600080fd5b505af4158015611446573d6000803e3d6000fd5b505050505050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611521576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611518906151e7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763db50e575606b6000606a60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900461ffff1661ffff1661ffff168152602001908152602001600020606960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168a8a8a8a8a6040518863ffffffff1660e01b81526004016115ed9796959493929190615267565b60006040518083038186803b15801561160557600080fd5b505af4158015611619573d6000803e3d6000fd5b5050505061166d878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505086613305565b915091509550959350505050565b606660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6116a9613008565b73ffffffffffffffffffffffffffffffffffffffff166116c7612057565b73ffffffffffffffffffffffffffffffffffffffff161461171d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611714906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763ee54ca53606b60008561ffff1661ffff16815260200190815260200160002084846040518463ffffffff1660e01b8152600401611772939291906152d1565b60006040518083038186803b15801561178a57600080fd5b505af415801561179e573d6000803e3d6000fd5b505050505050565b6117ae613008565b73ffffffffffffffffffffffffffffffffffffffff166117cc612057565b73ffffffffffffffffffffffffffffffffffffffff1614611822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611819906151c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415801561188c5750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b6118cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c290615247565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611999576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199090615227565b60405180910390fd5b60686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508060686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844081604051611b259190614f16565b60405180910390a150565b60008073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf7906151e7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763db50e575606b60008661ffff1661ffff168152602001908152602001600020606960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168b8b8b8b8b6040518863ffffffff1660e01b8152600401611c7f9796959493929190615267565b60006040518083038186803b158015611c9757600080fd5b505af4158015611cab573d6000803e3d6000fd5b50505050611cff888888888080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505087613010565b9050818015611d0c575080155b15611d43576040517fd27b44a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b979650505050505050565b611d56613008565b73ffffffffffffffffffffffffffffffffffffffff16611d74612057565b73ffffffffffffffffffffffffffffffffffffffff1614611dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dc1906151c7565b60405180910390fd5b611dd46000613609565b565b611dde613008565b73ffffffffffffffffffffffffffffffffffffffff16611dfc612057565b73ffffffffffffffffffffffffffffffffffffffff1614611e52576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e49906151c7565b60405180910390fd5b6000606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d660405160405180910390a35050565b606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b611f46613008565b73ffffffffffffffffffffffffffffffffffffffff16611f64612057565b73ffffffffffffffffffffffffffffffffffffffff1614611fba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb1906151c7565b60405180910390fd5b80606960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f5fe6aabf4e790843df43ae0e22b58620066fb389295bedc06a92df6c3b28777d606960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660405161204c9190614f16565b60405180910390a150565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b612089613008565b73ffffffffffffffffffffffffffffffffffffffff166120a7612057565b73ffffffffffffffffffffffffffffffffffffffff16146120fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120f4906151c7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763512ce0f2606b60008a61ffff1661ffff168152602001908152602001600020898989898989896040518963ffffffff1660e01b815260040161215c98979695949392919061544f565b60006040518083038186803b15801561217457600080fd5b505af4158015612188573d6000803e3d6000fd5b5050505050505050505050565b6000806000838060200190518101906121ae9190613f8b565b9250925092506121bc6136cf565b81606660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080606760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061224783612f10565b61224f6137b8565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f34d3b96a088381c6843a1f9d94d251afa88f83cc7a0d17fc23a7057506a3fc6d846040516122c39190614f16565b60405180910390a450505050565b6122d9613008565b73ffffffffffffffffffffffffffffffffffffffff166122f7612057565b73ffffffffffffffffffffffffffffffffffffffff161461234d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612344906151c7565b60405180910390fd5b81819050848490501461238c576040517f74f4d53700000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60005b848490508161ffff16101561247a5782828261ffff168181106123b5576123b4615b73565b5b90506020020160208101906123ca919061426a565b606b600087878561ffff168181106123e5576123e4615b73565b5b90506020020160208101906123fa9190614369565b61ffff1661ffff16815260200190815260200160002060000160008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061247290615aa1565b91505061238f565b5061248485610c03565b61249257612491856117a6565b5b7f4dcd99505817a4d3e4d3f751a4a49739ec38cb0f83319ff1224a3b289597e86c85858585856040516124c9959493929190614f31565b60405180910390a15050505050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156125ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125a2906151e7565b60405180910390fd5b7333d1c5a5b6a7f3885c7467e829aaa2169893759763db50e575606b60008761ffff1661ffff168152602001908152602001600020606960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168c8c8c8c8c6040518863ffffffff1660e01b815260040161262a9796959493929190615267565b60006040518083038186803b15801561264257600080fd5b505af4158015612656573d6000803e3d6000fd5b505050506126aa898989898080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f8201169050808301925050505050505088613305565b80925081935050508280156126bd575081155b156126f4576040517fd27b44a900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b97509795505050505050565b6000606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060008267ffffffffffffffff81111561274857612747615ba2565b5b6040519080825280602002602001820160405280156127765781602001602082028036833780820191505090505b509150600080606860008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690505b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141580156128495750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b801561285457508482105b1561291c578084838151811061286d5761286c615b73565b5b602002602001019073ffffffffffffffffffffffffffffffffffffffff16908173ffffffffffffffffffffffffffffffffffffffff1681525050606860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050818061291490615acc565b9250506127df565b80925081845250509250929050565b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b612959613008565b73ffffffffffffffffffffffffffffffffffffffff16612977612057565b73ffffffffffffffffffffffffffffffffffffffff16146129cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c4906151c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614158015612a375750600173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614155b612a76576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6d90615247565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612b43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b3a90615167565b60405180910390fd5b606860008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16606860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000606860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace405427681604051612cce9190614f16565b60405180910390a15050565b612ce2613008565b73ffffffffffffffffffffffffffffffffffffffff16612d00612057565b73ffffffffffffffffffffffffffffffffffffffff1614612d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d4d906151c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614612e73578073ffffffffffffffffffffffffffffffffffffffff166301ffc9a77fe6d7a83a000000000000000000000000000000000000000000000000000000006040518263ffffffff1660e01b8152600401612de3919061514c565b60206040518083038186803b158015612dfb57600080fd5b505afa158015612e0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e339190614297565b612e72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e6990615207565b60405180910390fd5b5b80606560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa2606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16604051612f059190614f16565b60405180910390a150565b612f18613008565b73ffffffffffffffffffffffffffffffffffffffff16612f36612057565b73ffffffffffffffffffffffffffffffffffffffff1614612f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f83906151c7565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612ffc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ff390615187565b60405180910390fd5b61300581613609565b50565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461314257606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528686868660008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b815260040161310f9b9a99989796959493929190614fef565b600060405180830381600087803b15801561312957600080fd5b505af115801561313d573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663468721a7868686866040518563ffffffff1660e01b81526004016131a39493929190614fa3565b602060405180830381600087803b1580156131bd57600080fd5b505af11580156131d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131f59190614297565b9050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146132fd57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000836040518363ffffffff1660e01b81526004016132ca929190615123565b600060405180830381600087803b1580156132e457600080fd5b505af11580156132f8573d6000803e3d6000fd5b505050505b949350505050565b60006060600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461343a57606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166375f0bb528787878760008060008060006040518060400160405280600281526020017f307800000000000000000000000000000000000000000000000000000000000081525060006040518c63ffffffff1660e01b81526004016134079b9a99989796959493929190614fef565b600060405180830381600087803b15801561342157600080fd5b505af1158015613435573d6000803e3d6000fd5b505050505b606760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16635229073f878787876040518563ffffffff1660e01b815260040161349b9493929190614fa3565b600060405180830381600087803b1580156134b557600080fd5b505af11580156134c9573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f820116820180604052508101906134f291906142c4565b8092508193505050600073ffffffffffffffffffffffffffffffffffffffff16606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461360057606560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663932713687f3078000000000000000000000000000000000000000000000000000000000000846040518363ffffffff1660e01b81526004016135cd929190615123565b600060405180830381600087803b1580156135e757600080fd5b505af11580156135fb573d6000803e3d6000fd5b505050505b94509492505050565b6000603360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081603360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600060019054906101000a900460ff16806136f5575060008054906101000a900460ff16155b613734576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161372b906151a7565b60405180910390fd5b60008060019054906101000a900460ff161590508015613784576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b61378c613900565b6137946139d9565b80156137b55760008060016101000a81548160ff0219169083151502179055505b50565b600073ffffffffffffffffffffffffffffffffffffffff1660686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461387e576040517ff736703400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600160686000600173ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b600060019054906101000a900460ff1680613926575060008054906101000a900460ff16155b613965576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161395c906151a7565b60405180910390fd5b60008060019054906101000a900460ff1615905080156139b5576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b80156139d65760008060016101000a81548160ff0219169083151502179055505b50565b600060019054906101000a900460ff16806139ff575060008054906101000a900460ff16155b613a3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a35906151a7565b60405180910390fd5b60008060019054906101000a900460ff161590508015613a8e576001600060016101000a81548160ff02191690831515021790555060016000806101000a81548160ff0219169083151502179055505b613a9e613a99613008565b613609565b8015613abf5760008060016101000a81548160ff0219169083151502179055505b50565b6000613ad5613ad084615626565b615601565b90508083825260208201905082856020860282011115613af857613af7615be5565b5b60005b85811015613b4657813567ffffffffffffffff811115613b1e57613b1d615bdb565b5b808601613b2b8982613e6f565b85526020850194506020840193505050600181019050613afb565b5050509392505050565b6000613b63613b5e84615652565b615601565b905082815260208101848484011115613b7f57613b7e615bea565b5b613b8a848285615a2e565b509392505050565b6000613ba5613ba084615652565b615601565b905082815260208101848484011115613bc157613bc0615bea565b5b613bcc848285615a3d565b509392505050565b600081359050613be381615df3565b92915050565b600081519050613bf881615e0a565b92915050565b60008083601f840112613c1457613c13615bdb565b5b8235905067ffffffffffffffff811115613c3157613c30615bd6565b5b602083019150836020820283011115613c4d57613c4c615be5565b5b9250929050565b60008083601f840112613c6a57613c69615bdb565b5b8235905067ffffffffffffffff811115613c8757613c86615bd6565b5b602083019150836020820283011115613ca357613ca2615be5565b5b9250929050565b600082601f830112613cbf57613cbe615bdb565b5b8135613ccf848260208601613ac2565b91505092915050565b60008083601f840112613cee57613ced615bdb565b5b8235905067ffffffffffffffff811115613d0b57613d0a615bd6565b5b602083019150836020820283011115613d2757613d26615be5565b5b9250929050565b60008083601f840112613d4457613d43615bdb565b5b8235905067ffffffffffffffff811115613d6157613d60615bd6565b5b602083019150836020820283011115613d7d57613d7c615be5565b5b9250929050565b60008083601f840112613d9a57613d99615bdb565b5b8235905067ffffffffffffffff811115613db757613db6615bd6565b5b602083019150836020820283011115613dd357613dd2615be5565b5b9250929050565b600081359050613de981615e21565b92915050565b600081519050613dfe81615e21565b92915050565b600081359050613e1381615e38565b92915050565b60008083601f840112613e2f57613e2e615bdb565b5b8235905067ffffffffffffffff811115613e4c57613e4b615bd6565b5b602083019150836001820283011115613e6857613e67615be5565b5b9250929050565b600082601f830112613e8457613e83615bdb565b5b8135613e94848260208601613b50565b91505092915050565b600082601f830112613eb257613eb1615bdb565b5b8151613ec2848260208601613b92565b91505092915050565b600081359050613eda81615e4f565b92915050565b600081359050613eef81615e5f565b92915050565b600081359050613f0481615e6f565b92915050565b600081359050613f1981615e7f565b92915050565b600081359050613f2e81615e8f565b92915050565b600081359050613f4381615ea6565b92915050565b600081359050613f5881615ebd565b92915050565b600060208284031215613f7457613f73615bf9565b5b6000613f8284828501613bd4565b91505092915050565b600080600060608486031215613fa457613fa3615bf9565b5b6000613fb286828701613be9565b9350506020613fc386828701613be9565b9250506040613fd486828701613be9565b9150509250925092565b60008060408385031215613ff557613ff4615bf9565b5b600061400385828601613bd4565b925050602061401485828601613bd4565b9150509250929050565b60008060008060006060868803121561403a57614039615bf9565b5b600061404888828901613bd4565b955050602086013567ffffffffffffffff81111561406957614068615bef565b5b61407588828901613d84565b9450945050604086013567ffffffffffffffff81111561409857614097615bef565b5b6140a488828901613bfe565b92509250509295509295909350565b600080604083850312156140ca576140c9615bf9565b5b60006140d885828601613bd4565b92505060206140e985828601613f1f565b9150509250929050565b6000806040838503121561410a57614109615bf9565b5b600061411885828601613bd4565b925050602061412985828601613f34565b9150509250929050565b60008060008060006080868803121561414f5761414e615bf9565b5b600061415d88828901613bd4565b955050602061416e88828901613f34565b945050604086013567ffffffffffffffff81111561418f5761418e615bef565b5b61419b88828901613e19565b935093505060606141ae88828901613ef5565b9150509295509295909350565b600080600080600080600060c0888a0312156141da576141d9615bf9565b5b60006141e88a828b01613bd4565b97505060206141f98a828b01613f34565b965050604088013567ffffffffffffffff81111561421a57614219615bef565b5b6142268a828b01613e19565b955095505060606142398a828b01613ef5565b935050608061424a8a828b01613f1f565b92505060a061425b8a828b01613dda565b91505092959891949750929550565b6000602082840312156142805761427f615bf9565b5b600061428e84828501613dda565b91505092915050565b6000602082840312156142ad576142ac615bf9565b5b60006142bb84828501613def565b91505092915050565b600080604083850312156142db576142da615bf9565b5b60006142e985828601613def565b925050602083015167ffffffffffffffff81111561430a57614309615bef565b5b61431685828601613e9d565b9150509250929050565b60006020828403121561433657614335615bf9565b5b600082013567ffffffffffffffff81111561435457614353615bef565b5b61436084828501613e6f565b91505092915050565b60006020828403121561437f5761437e615bf9565b5b600061438d84828501613f1f565b91505092915050565b600080604083850312156143ad576143ac615bf9565b5b60006143bb85828601613f1f565b92505060206143cc85828601613bd4565b9150509250929050565b6000806000606084860312156143ef576143ee615bf9565b5b60006143fd86828701613f1f565b935050602061440e86828701613bd4565b925050604061441f86828701613e04565b9150509250925092565b60008060008060008060008060008060006101008c8e03121561444f5761444e615bf9565b5b600061445d8e828f01613f1f565b9b5050602061446e8e828f01613bd4565b9a5050604061447f8e828f01613e04565b99505060608c013567ffffffffffffffff8111156144a05761449f615bef565b5b6144ac8e828f01613bfe565b985098505060808c013567ffffffffffffffff8111156144cf576144ce615bef565b5b6144db8e828f01613d2e565b965096505060a08c013567ffffffffffffffff8111156144fe576144fd615bef565b5b61450a8e828f01613cd8565b945094505060c08c013567ffffffffffffffff81111561452d5761452c615bef565b5b6145398e828f01613caa565b92505060e061454a8e828f01613ee0565b9150509295989b509295989b9093969950565b6000806000806080858703121561457757614576615bf9565b5b600061458587828801613f1f565b945050602061459687828801613bd4565b93505060406145a787828801613e04565b92505060606145b887828801613ee0565b91505092959194509250565b600080600080600080600060c0888a0312156145e3576145e2615bf9565b5b60006145f18a828b01613f1f565b97505060206146028a828b01613bd4565b96505060406146138a828b01613e04565b95505060606146248a828b01613f34565b94505060806146358a828b01613f0a565b93505060a088013567ffffffffffffffff81111561465657614655615bef565b5b6146628a828b01613c54565b925092505092959891949750929550565b60008060008060008060008060e0898b03121561469357614692615bf9565b5b60006146a18b828c01613f1f565b98505060206146b28b828c01613bd4565b97505060406146c38b828c01613e04565b96505060606146d48b828c01613f34565b95505060806146e58b828c01613f0a565b94505060a06146f68b828c01613ecb565b93505060c089013567ffffffffffffffff81111561471757614716615bef565b5b6147238b828c01613e19565b92509250509295985092959890939650565b6000806000806080858703121561474f5761474e615bf9565b5b600061475d87828801613f1f565b945050602061476e87828801613bd4565b935050604061477f87828801613e04565b925050606061479087828801613f49565b91505092959194509250565b6000806000606084860312156147b5576147b4615bf9565b5b60006147c386828701613f1f565b93505060206147d486828701613bd4565b92505060406147e586828701613ee0565b9150509250925092565b60006147fb83836148b8565b60208301905092915050565b60006148138383614bff565b60208301905092915050565b600061482b8383614c1d565b60208301905092915050565b6000614844848484614c86565b90509392505050565b60006148598383614cec565b905092915050565b600061486d8383614d34565b60208301905092915050565b60006148858383614d7f565b60208301905092915050565b600061489d8383614ebc565b60208301905092915050565b6148b2816158dd565b82525050565b6148c1816158cb565b82525050565b6148d0816158cb565b82525050565b6148df816158cb565b82525050565b60006148f0826156d5565b6148fa8185615751565b935061490583615683565b8060005b8381101561493657815161491d88826147ef565b9750614928836156f6565b925050600181019050614909565b5085935050505092915050565b600061494f8385615762565b935061495a82615693565b8060005b8581101561499357614970828461580c565b61497a8882614807565b975061498583615703565b92505060018101905061495e565b5085925050509392505050565b60006149ac8385615773565b93506149b782615693565b8060005b858110156149f0576149cd828461580c565b6149d7888261481f565b97506149e283615703565b9250506001810190506149bb565b5085925050509392505050565b6000614a098385615784565b935083602084028501614a1b8461569d565b8060005b87811015614a61578484038952614a368284615823565b614a41868284614837565b9550614a4c84615710565b935060208b019a505050600181019050614a1f565b50829750879450505050509392505050565b6000614a7e826156e0565b614a888185615784565b935083602082028501614a9a856156a7565b8060005b85811015614ad65784840389528151614ab7858261484d565b9450614ac28361571d565b925060208a01995050600181019050614a9e565b50829750879550505050505092915050565b6000614af48385615795565b9350614aff826156b7565b8060005b85811015614b3857614b158284615886565b614b1f8882614861565b9750614b2a8361572a565b925050600181019050614b03565b5085925050509392505050565b6000614b5183856157a6565b9350614b5c826156c1565b8060005b85811015614b9557614b72828461589d565b614b7c8882614879565b9750614b8783615737565b925050600181019050614b60565b5085925050509392505050565b6000614bae83856157b7565b9350614bb9826156cb565b8060005b85811015614bf257614bcf82846158b4565b614bd98882614891565b9750614be483615744565b925050600181019050614bbd565b5085925050509392505050565b614c08816158ef565b82525050565b614c17816158ef565b82525050565b614c26816158ef565b82525050565b614c35816158fb565b82525050565b614c4481615905565b82525050565b614c5381615905565b82525050565b6000614c6583856157d9565b9350614c72838584615a2e565b614c7b83615bfe565b840190509392505050565b6000614c9283856157ea565b9350614c9f838584615a2e565b614ca883615bfe565b840190509392505050565b6000614cbe826156eb565b614cc881856157c8565b9350614cd8818560208601615a3d565b614ce181615bfe565b840191505092915050565b6000614cf7826156eb565b614d0181856157ea565b9350614d11818560208601615a3d565b614d1a81615bfe565b840191505092915050565b614d2e816159c2565b82525050565b614d3d816159c2565b82525050565b614d4c816159d4565b82525050565b614d5b816159e6565b82525050565b614d6a816159e6565b82525050565b614d79816159f8565b82525050565b614d88816159f8565b82525050565b614d9781615a0a565b82525050565b6000614daa6017836157fb565b9150614db582615c0f565b602082019050919050565b6000614dcd6026836157fb565b9150614dd882615c38565b604082019050919050565b6000614df0602e836157fb565b9150614dfb82615c87565b604082019050919050565b6000614e136020836157fb565b9150614e1e82615cd6565b602082019050919050565b6000614e366015836157fb565b9150614e4182615cff565b602082019050919050565b6000614e596020836157fb565b9150614e6482615d28565b602082019050919050565b6000614e7c6016836157fb565b9150614e8782615d51565b602082019050919050565b6000614e9f600e836157fb565b9150614eaa82615d7a565b602082019050919050565b8082525050565b614ec58161597d565b82525050565b614ed48161597d565b82525050565b614ee38161597d565b82525050565b614ef2816159ab565b82525050565b614f01816159ab565b82525050565b614f1081615a1c565b82525050565b6000602082019050614f2b60008301846148c7565b92915050565b6000606082019050614f4660008301886148c7565b8181036020830152614f59818688614ba2565b90508181036040830152614f6e818486614943565b90509695505050505050565b6000604082019050614f8f60008301856148c7565b614f9c6020830184614ecb565b9392505050565b6000608082019050614fb860008301876148c7565b614fc56020830186614ee9565b8181036040830152614fd78185614cb3565b9050614fe66060830184614d52565b95945050505050565b600061016082019050615005600083018e6148c7565b615012602083018d614ee9565b8181036040830152615024818c614cb3565b9050615033606083018b614d52565b615040608083018a614d8e565b61504d60a0830189614d8e565b61505a60c0830188614d8e565b61506760e08301876148c7565b6150756101008301866148a9565b8181036101208301526150888185614cb3565b90506150986101408301846148c7565b9c9b505050505050505050505050565b600060408201905081810360008301526150c281856148e5565b90506150d160208301846148c7565b9392505050565b60006020820190506150ed6000830184614c0e565b92915050565b60006040820190506151086000830185614c0e565b818103602083015261511a8184614cb3565b90509392505050565b60006040820190506151386000830185614c2c565b6151456020830184614c0e565b9392505050565b60006020820190506151616000830184614c3b565b92915050565b6000602082019050818103600083015261518081614d9d565b9050919050565b600060208201905081810360008301526151a081614dc0565b9050919050565b600060208201905081810360008301526151c081614de3565b9050919050565b600060208201905081810360008301526151e081614e06565b9050919050565b6000602082019050818103600083015261520081614e29565b9050919050565b6000602082019050818103600083015261522081614e4c565b9050919050565b6000602082019050818103600083015261524081614e6f565b9050919050565b6000602082019050818103600083015261526081614e92565b9050919050565b600060c08201905061527c600083018a614eb5565b61528960208301896148d6565b61529660408301886148d6565b6152a36060830187614ef8565b81810360808301526152b6818587614c59565b90506152c560a0830184614d61565b98975050505050505050565b60006060820190506152e66000830186614eb5565b6152f36020830185614eda565b61530060408301846148d6565b949350505050565b600060808201905061531d6000830187614eb5565b61532a6020830186614eda565b61533760408301856148d6565b6153446060830184614c4a565b95945050505050565b600061012082019050615363600083018f614eb5565b615370602083018e614eda565b61537d604083018d6148d6565b61538a606083018c614c4a565b818103608083015261539d818a8c6149a0565b905081810360a08301526153b281888a614b45565b905081810360c08301526153c7818688614ae8565b905081810360e08301526153db8185614a73565b90506153eb610100830184614d43565b9d9c50505050505050505050505050565b600060a0820190506154116000830188614eb5565b61541e6020830187614eda565b61542b60408301866148d6565b6154386060830185614c4a565b6154456080830184614d43565b9695505050505050565b600060e082019050615464600083018b614eb5565b615471602083018a614eda565b61547e60408301896148d6565b61548b6060830188614c4a565b6154986080830187614ef8565b6154a560a0830186614d70565b81810360c08301526154b88184866149fd565b90509998505050505050505050565b6000610100820190506154dd600083018c614eb5565b6154ea602083018b614eda565b6154f7604083018a6148d6565b6155046060830189614c4a565b6155116080830188614ef8565b61551e60a0830187614d70565b61552b60c0830186614d25565b81810360e083015261553e818486614c59565b90509a9950505050505050505050565b600060a0820190506155636000830188614eb5565b6155706020830187614eda565b61557d60408301866148d6565b61558a6060830185614c4a565b6155976080830184614f07565b9695505050505050565b60006080820190506155b66000830187614eb5565b6155c36020830186614eda565b6155d060408301856148d6565b6155dd6060830184614d43565b95945050505050565b60006020820190506155fb6000830184614ecb565b92915050565b600061560b61561c565b90506156178282615a70565b919050565b6000604051905090565b600067ffffffffffffffff82111561564157615640615ba2565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561566d5761566c615ba2565b5b61567682615bfe565b9050602081019050919050565b6000819050602082019050919050565b6000819050919050565b6000819050919050565b6000819050602082019050919050565b6000819050919050565b6000819050919050565b6000819050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600061581b6020840184613dda565b905092915050565b600080833560016020038436030381126158405761583f615bf4565b5b83810192508235915060208301925067ffffffffffffffff82111561586857615867615bd1565b5b60018202360384131561587e5761587d615be0565b5b509250929050565b60006158956020840184613ecb565b905092915050565b60006158ac6020840184613f0a565b905092915050565b60006158c36020840184613f1f565b905092915050565b60006158d68261598b565b9050919050565b60006158e88261598b565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600081905061593f82615da3565b919050565b600081905061595282615db7565b919050565b600081905061596582615dcb565b919050565b600081905061597882615ddf565b919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006159cd82615931565b9050919050565b60006159df82615944565b9050919050565b60006159f182615957565b9050919050565b6000615a038261596a565b9050919050565b6000615a15826159ab565b9050919050565b6000615a27826159b5565b9050919050565b82818337600083830152505050565b60005b83811015615a5b578082015181840152602081019050615a40565b83811115615a6a576000848401525b50505050565b615a7982615bfe565b810181811067ffffffffffffffff82111715615a9857615a97615ba2565b5b80604052505050565b6000615aac8261597d565b915061ffff821415615ac157615ac0615b15565b5b600182019050919050565b6000615ad7826159ab565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415615b0a57615b09615b15565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4d6f64756c6520616c72656164792064697361626c6564000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4d6f64756c65206e6f7420617574686f72697a65640000000000000000000000600082015250565b7f477561726420646f6573206e6f7420696d706c656d656e742049455243313635600082015250565b7f4d6f64756c6520616c726561647920656e61626c656400000000000000000000600082015250565b7f496e76616c6964206d6f64756c65000000000000000000000000000000000000600082015250565b60048110615db457615db3615b44565b5b50565b60048110615dc857615dc7615b44565b5b50565b60028110615ddc57615ddb615b44565b5b50565b60038110615df057615def615b44565b5b50565b615dfc816158cb565b8114615e0757600080fd5b50565b615e13816158dd565b8114615e1e57600080fd5b50565b615e2a816158ef565b8114615e3557600080fd5b50565b615e4181615905565b8114615e4c57600080fd5b50565b60048110615e5c57600080fd5b50565b60048110615e6c57600080fd5b50565b60028110615e7c57600080fd5b50565b60038110615e8c57600080fd5b50565b615e988161597d565b8114615ea357600080fd5b50565b615eaf816159ab565b8114615eba57600080fd5b50565b615ec6816159b5565b8114615ed157600080fd5b5056fea26469706673582212201b02673520ea9284b2f57287bb54a9784eae9a7d7b2ce9eb5f58478be826f60064736f6c63430008060033000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001"; + "0x60806040523480156200001157600080fd5b506040516200636638038062006366833981016040819052620000349162000420565b604080516001600160a01b038581166020830152848116828401528316606080830191909152825180830390910181526080909101909152620000778162000081565b5050505062000474565b600054610100900460ff1615808015620000a25750600054600160ff909116105b80620000d25750620000bf306200026560201b620017801760201c565b158015620000d2575060005460ff166001145b6200013b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156200015f576000805461ff0019166101001790555b6000806000848060200190518101906200017a919062000420565b919450925090506200018b62000274565b606680546001600160a01b038085166001600160a01b0319928316179092556067805492841692909116919091179055620001c683620002dc565b620001d06200032e565b6040516001600160a01b038281168252808416919085169033907f34d3b96a088381c6843a1f9d94d251afa88f83cc7a0d17fc23a7057506a3fc6d9060200160405180910390a4505050801562000261576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b6001600160a01b03163b151590565b600054610100900460ff16620002d05760405162461bcd60e51b815260206004820152602b60248201526000805160206200632683398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000132565b620002da620003a0565b565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600052606860205260008051602062006346833981519152546001600160a01b031615620003715760405163dfd49ebd60e01b815260040160405180910390fd5b6001600081905260686020526000805160206200634683398151915280546001600160a01b0319169091179055565b600054610100900460ff16620003fc5760405162461bcd60e51b815260206004820152602b60248201526000805160206200632683398151915260448201526a6e697469616c697a696e6760a81b606482015260840162000132565b620002da33620002dc565b6001600160a01b03811681146200041d57600080fd5b50565b6000806000606084860312156200043657600080fd5b8351620004438162000407565b6020850151909350620004568162000407565b6040850151909250620004698162000407565b809150509250925092565b615ea280620004846000396000f3fe608060405234801561001057600080fd5b50600436106101b05760003560e01c8063776d1a01116100ef578063b3dd25c711610092578063b3dd25c71461045d578063c6fe874714610470578063c910638914610483578063cc2f845214610494578063d4b83992146104b5578063e009cfde146104c8578063e19a9dd9146104db578063f2fde38b146104ee57600080fd5b8063776d1a01146103c75780637b0da5b2146103da5780637ceab3b1146103ed5780638da5cb5b14610400578063946d364e14610411578063957ed2b314610424578063a4f9edbf14610437578063a8ec43ee1461044a57600080fd5b8063468721a711610157578063468721a7146102b45780635229073f146102c75780635aef7de6146102da5780635e7c9fe8146102ed578063610b59251461038657806366523f7d14610399578063715018a6146103ac5780637508dd98146103b457600080fd5b80630172a43a146101b5578063086cfca8146101ca5780630c6c76b8146101dd5780632916a9af146101f05780632959513c146102035780632b99e506146102425780632d3c2547146102635780632d9ad53d14610291575b600080fd5b6101c86101c3366004614c17565b610501565b005b6101c86101d8366004614c47565b6105d8565b6101c86101eb366004614c17565b610632565b6101c86101fe366004614c7c565b610708565b61022c610211366004614cc5565b606b602052600090815260409020546001600160a01b031681565b6040516102399190614cde565b60405180910390f35b610255610250366004614d4e565b6107ae565b604051610239929190614e2d565b610283610271366004614c47565b606c6020526000908152604090205481565b604051908152602001610239565b6102a461029f366004614c47565b610895565b6040519015158152602001610239565b6102a46102c2366004614e48565b6108d0565b6102556102d5366004614e48565b61098a565b60665461022c906001600160a01b031681565b6103476102fb366004614cc5565b606a60205260009081526040902080546001909101546001600160801b0380831692600160801b90048116916001600160401b0380821692600160401b83041691600160c01b90041685565b604080516001600160801b03968716815294861660208601526001600160401b039384169085015293166060830152909116608082015260a001610239565b6101c8610394366004614c47565b610a4b565b6101c86103a7366004614ebb565b610b54565b6101c8610be1565b6101c86103c2366004615047565b610bf5565b6101c86103d5366004614c47565b610ccd565b6101c86103e83660046151c6565b610d27565b60655461022c906001600160a01b031681565b6033546001600160a01b031661022c565b6101c861041f3660046151fb565b610e03565b6101c861043236600461526b565b610e5c565b6101c86104453660046152ed565b610f74565b6101c861045836600461534f565b611141565b6101c861046b3660046153bc565b6112cb565b6102a461047e366004614d4e565b61134d565b6065546001600160a01b031661022c565b6104a76104a23660046151fb565b611424565b60405161023992919061540b565b60675461022c906001600160a01b031681565b6101c86104d6366004615468565b61151d565b6101c86104e9366004614c47565b611616565b6101c86104fc366004614c47565b611707565b61050961178f565b60408051808201825260008082526020808301829052858252606981528382206001600160a01b0386168352600190810190915292902081518154929391929091839160ff19169083600281111561056357610563615496565b021790555060208201518154829061ff00191661010083600381111561058b5761058b615496565b021790555050604080518481526001600160a01b03841660208201527f3ccf62aacc3286173cedf5c20ec550071636a2faf0a3b28d93841736a43f822b9250015b60405180910390a15050565b6105e061178f565b606680546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f52ae88b092de36f87fb43fe794eb1381023b9c1bce563a871154022c63dce34290600090a35050565b61063a61178f565b6040805180820190915280600281526020016000905260008381526069602090815260408083206001600160a01b038616845260019081019092529091208251815491929091839160ff199091169083600281111561069b5761069b615496565b021790555060208201518154829061ff0019166101008360038111156106c3576106c3615496565b021790555050604080518481526001600160a01b03841660208201527f277465b84f512b759d745fab70327b693ee21ce592fca91a3f491739a25fa76a9250016105cc565b61071061178f565b60a082901c63ffffffff60401b16606084811b6001600160601b031916919091176000908152606b602090815260409182902080546001600160a01b0319166001600160a01b03868116918217909255835191881682526001600160e01b0319871692820192909252918201527f1330d96b64c7e86736f77e027ca34223dd3d1d08049281281c9d597d8098ed5991015b60405180910390a1505050565b336000908152606860205260408120546060906001600160a01b03166107f25733604051634a0bfec160e01b81526004016107e99190614cde565b60405180910390fd5b6000610802858b8b8b8b8b6117e9565b905061080d81611927565b6108508a8a8a8a8080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508c9250611ad9915050565b9093509150838015610860575082155b1561087e5760405163d27b44a960e01b815260040160405180910390fd5b6108888184611cf3565b5097509795505050505050565b600060016001600160a01b038316148015906108ca57506001600160a01b038281166000908152606860205260409020541615155b92915050565b336000908152606860205260408120546001600160a01b03166109085733604051634a0bfec160e01b81526004016107e99190614cde565b336000908152606c60205260408120546109269088888888886117e9565b905061093181611927565b610974878787878080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250899250611de4915050565b91506109808183611cf3565b5095945050505050565b336000908152606860205260408120546060906001600160a01b03166109c55733604051634a0bfec160e01b81526004016107e99190614cde565b336000908152606c60205260408120546109e39089898989896117e9565b90506109ee81611927565b610a31888888888080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508a9250611ad9915050565b9093509150610a408184611cf3565b509550959350505050565b610a5361178f565b6001600160a01b0381161580610a7257506001600160a01b0381166001145b15610a925780604051635c93ff2f60e11b81526004016107e99190614cde565b6001600160a01b038181166000908152606860205260409020541615610acd5780604051632061897360e01b81526004016107e99190614cde565b6068602052600080516020615e4d83398151915280546001600160a01b03838116600081815260408082208054949095166001600160a01b03199485161790945560019052835490911617909155517fecdf3a3effea5783a3c4c2140e677577666428d44ed9d474a0b3a4c9943f844090610b49908390614cde565b60405180910390a150565b610b5c61178f565b600083815260696020526040812060020190610b788484611fee565b8152602001908152602001600020600090557f32a3a599b308fc900a0e6513db2ad40bf0c94367da90048a4b308d8c6b2dd6ea8383836040516107a1939291909283526001600160a01b039190911660208301526001600160e01b031916604082015260600190565b610be961178f565b610bf3600061200e565b565b610bfd61178f565b60405163783a904760e01b81527352c342e002c5f7cf14ef89b5e04cf6d53c7f8e729063783a904790610c349085906004016154d0565b60006040518083038186803b158015610c4c57600080fd5b505af4158015610c60573d6000803e3d6000fd5b5050506000868152606960205260409020610c879150610c808686611fee565b8484612060565b7f4f6c340456f64db31a3d003c1224ba1de058557b1cdf71f21ae48ce4a4f64f528585858585604051610cbe95949392919061557f565b60405180910390a15050505050565b610cd561178f565b606780546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f90cc2f570a6eb594b1580ea3e41247d2d73a55281889e86bd4ec2fc29c7e62d690600090a35050565b610d2f61178f565b604080518082019091528060018152602001826003811115610d5357610d53615496565b905260008481526069602090815260408083206001600160a01b038716845260019081019092529091208251815491929091839160ff1990911690836002811115610da057610da0615496565b021790555060208201518154829061ff001916610100836003811115610dc857610dc8615496565b02179055509050507f05e4ec9b54e94ad676ef61d57214f6d57d752ed2022dea5e5f956d5df7ccb2508383836040516107a19392919061564d565b610e0b61178f565b6001600160a01b0382166000818152606c6020908152604091829020849055815192835282018390527f60c85b61661a191efceebca036d48b290e04a1f08dd96472b920adbdd50c64e891016105cc565b610e6461178f565b828114610e84576040516374f4d53760e01b815260040160405180910390fd5b60005b61ffff8116841115610f265782828261ffff16818110610ea957610ea9615670565b9050602002016020810190610ebe9190615686565b6069600087878561ffff16818110610ed857610ed8615670565b6020908102929092013583525081810192909252604090810160009081206001600160a01b038b1682529092529020805460ff1916911515919091179055610f1f816156b9565b9050610e87565b50610f3085610895565b610f3d57610f3d85610a4b565b7f9f8368fa4ddcbd561efd7ad2a2174235bf5b840a73fb18f20db9705c114624988585858585604051610cbe9594939291906156da565b600054610100900460ff1615808015610f945750600054600160ff909116105b80610fb55750610fa330611780565b158015610fb5575060005460ff166001145b6110185760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016107e9565b6000805460ff19166001179055801561103b576000805461ff0019166101001790555b600080600084806020019051810190611054919061576c565b925092509250611062612116565b606680546001600160a01b038085166001600160a01b031992831617909255606780549284169290911691909117905561109b8361200e565b6110a3612145565b816001600160a01b0316836001600160a01b0316336001600160a01b03167f34d3b96a088381c6843a1f9d94d251afa88f83cc7a0d17fc23a7057506a3fc6d846040516110f09190614cde565b60405180910390a4505050801561113d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020016105cc565b5050565b61114961178f565b6000846001600160801b031611611167576001600160801b03611169565b835b9350836001600160801b0316856001600160801b0316111561119e5760405163535f0e9160e01b815260040160405180910390fd5b6040805160a0810182526001600160801b03808616825286811660208084019182526001600160401b038088168587019081528b8516606087019081528883166080880190815260008f8152606a90955293889020965194518616600160801b029486169490941786555160019095018054935192518216600160c01b026001600160c01b0393909516600160401b026001600160c01b031990941695909116949094179190911716179055517f63d7ec44a20b176da1d60d75259d264ee67b3d8213706afa71a28f69ed8ebece906112bb908890889088908890889088909586526001600160801b0394851660208701529284166040860152921660608401526001600160401b0391821660808401521660a082015260c00190565b60405180910390a1505050505050565b6112d361178f565b6112dc816121b4565b6000858152606960205260408120600201906112f88686611fee565b8152602001908152602001600020819055507f9603b65b11492fec54ccc3d9feb93536f804d82e12228187ff730a253fc283ee8484848460405161133f94939291906157ae565b60405180910390a150505050565b336000908152606860205260408120546001600160a01b03166113855733604051634a0bfec160e01b81526004016107e99190614cde565b6000611395848a8a8a8a8a6117e9565b90506113a081611927565b6113e3898989898080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152508b9250611de4915050565b91508280156113f0575081155b1561140e5760405163d27b44a960e01b815260040160405180910390fd5b6114188183611cf3565b50979650505050505050565b60606000826001600160401b0381111561144057611440614ef9565b604051908082528060200260200182016040528015611469578160200160208202803683370190505b506001600160a01b0380861660009081526068602052604081205492945091165b6001600160a01b038116158015906114ac57506001600160a01b038116600114155b80156114b757508482105b1561150f57808483815181106114cf576114cf615670565b6001600160a01b03928316602091820292909201810191909152918116600090815260689092526040909120541681611507816157e1565b92505061148a565b908352919491935090915050565b61152561178f565b6001600160a01b038116158061154457506001600160a01b0381166001145b156115645780604051635c93ff2f60e11b81526004016107e99190614cde565b6001600160a01b038281166000908152606860205260409020548116908216146115a35780604051638b4189ff60e01b81526004016107e99190614cde565b6001600160a01b03818116600081815260686020526040808220805487861684528284208054919096166001600160a01b0319918216179095559290915281549092169055517faab4fa2b463f581b2b32cb3b7e3b704b9ce37cc209b5fb4d77e593ace4054276906105cc908390614cde565b61161e61178f565b6001600160a01b038116156116bb576040516301ffc9a760e01b815263736bd41d60e11b60048201526001600160a01b038216906301ffc9a790602401602060405180830381865afa158015611678573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061169c91906157fa565b6116bb57806040516358b7533f60e11b81526004016107e99190614cde565b606580546001600160a01b0319166001600160a01b0383169081179091556040517f1151116914515bc0891ff9047a6cb32cf902546f83066499bcf8ba33d2353fa291610b4991614cde565b61170f61178f565b6001600160a01b0381166117745760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b60648201526084016107e9565b61177d8161200e565b50565b6001600160a01b03163b151590565b6033546001600160a01b03163314610bf35760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016107e9565b6060600087900361180d57604051631fb1d3e560e31b815260040160405180910390fd5b6000878152606960209081526040808320338452918290529091205460ff1661184957604051631fb1d3e560e31b815260040160405180910390fd5b6000611891886118598789615817565b60a01c63ffffffff60401b1660609190911b6001600160601b031916176000908152606b60205260409020546001600160a01b031690565b9050600061189d614bae565b6001600160a01b0383166118c8576118be848b8b8b8b8b87600001516121d8565b90925090506118dd565b6118d783858c8c8c8c8c6123d5565b90925090505b60008260138111156118f1576118f1615496565b14611916576020810151604051631a1537eb60e31b81526107e9918491600401615847565b5193505050505b9695505050505050565b805160005b81811015611ad457600083828151811061194857611948615670565b60209081029190910181015180516040808301516000838152606a8652828120835160a08101855281546001600160801b038082168352600160801b90910481169882019890985260018201546001600160401b0380821696830196909652600160401b81049098166060820152600160c01b909704909316608087015293955091939192909181906119db9042612522565b9150915085602001516001600160801b0316826001600160801b031614611a0457611a04615865565b816001600160801b0316846001600160801b03161115611a2657611a26615865565b611a30848361587b565b6001840180546001600160401b03808516600160c01b026001600160c01b036001600160801b0395909516600160401b02949094169116179190911790557f90355d540c2980efb4c360996dfc5405ee87e812e4f3db843857547cbdb5af658585611a9b818661587b565b604080519384526001600160801b03928316602085015291169082015260600160405180910390a186600101965050505050505061192c565b505050565b6065546000906060906001600160a01b03168015611c66576040805180820182526002815261060f60f31b60208201529051633af85da960e11b81526001600160a01b038316916375f0bb5291611b47918b918b918b918b91600091829182918291829133906004016158ab565b600060405180830381600087803b158015611b6157600080fd5b505af1158015611b75573d6000803e3d6000fd5b5050606754604051635229073f60e01b81526001600160a01b039091169250635229073f9150611baf908a908a908a908a9060040161593a565b6000604051808303816000875af1158015611bce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611bf691908101906159b5565b604051631264e26d60e31b815261060f60f31b6004820152821515602482015291945092506001600160a01b03821690639327136890604401600060405180830381600087803b158015611c4957600080fd5b505af1158015611c5d573d6000803e3d6000fd5b50505050611ce9565b606754604051635229073f60e01b81526001600160a01b0390911690635229073f90611c9c908a908a908a908a9060040161593a565b6000604051808303816000875af1158015611cbb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ce391908101906159b5565b90935091505b5094509492505050565b815160005b81811015611dde576000848281518110611d1457611d14615670565b602002602001015190506000816000015190508415611d9357604082015160208301517f90355d540c2980efb4c360996dfc5405ee87e812e4f3db843857547cbdb5af65918391611d6690829061587b565b604080519384526001600160801b03928316602085015291169082015260600160405180910390a1611dd4565b6020808301516000838152606a909252604090912060010180546001600160801b03909216600160401b02600160401b600160c01b03199092169190911790555b5050600101611cf8565b50505050565b6065546000906001600160a01b03168015611f68576040805180820182526002815261060f60f31b60208201529051633af85da960e11b81526001600160a01b038316916375f0bb5291611e4f918a918a918a918a91600091829182918291829133906004016158ab565b600060405180830381600087803b158015611e6957600080fd5b505af1158015611e7d573d6000803e3d6000fd5b505060675460405163468721a760e01b81526001600160a01b03909116925063468721a79150611eb790899089908990899060040161593a565b6020604051808303816000875af1158015611ed6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611efa91906157fa565b604051631264e26d60e31b815261060f60f31b600482015281151560248201529092506001600160a01b03821690639327136890604401600060405180830381600087803b158015611f4b57600080fd5b505af1158015611f5f573d6000803e3d6000fd5b50505050611fe4565b60675460405163468721a760e01b81526001600160a01b039091169063468721a790611f9e90899089908990899060040161593a565b6020604051808303816000875af1158015611fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fe191906157fa565b91505b505b949350505050565b60a01c63ffffffff60401b1660609190911b6001600160601b0319161790565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b604051634031b16960e11b81526000907360e89c71882e88f16772490d2f05819d9521eab19063806362d29061209a9086906004016154d0565b600060405180830381865af41580156120b7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526120df9190810190615a05565b905060006120ec82612617565b90506120fa84518483612747565b6000958652600290960160205250506040909220929092555050565b600054610100900460ff1661213d5760405162461bcd60e51b81526004016107e990615a39565b610bf361277a565b60016000526068602052600080516020615e4d833981519152546001600160a01b0316156121865760405163dfd49ebd60e01b815260040160405180910390fd5b600160008190526068602052600080516020615e4d83398151915280546001600160a01b0319169091179055565b6000600160d81b60e08360038111156121cf576121cf615496565b901b1792915050565b60006121e2614bae565b84158015906121f15750600485105b1561220f57604051632342609160e11b815260040160405180910390fd5b6001600160a01b03881660009081526001808b01602052604090912090815460ff16600281111561224257612242615496565b0361228057805461225e9089908790610100900460ff166127aa565b60405180604001604052808681526020016000801b81525092509250506123c9565b6002815460ff16600281111561229857612298615496565b036123ae5760006122b28a6122ad898b615817565b611fee565b600081815260028d01602052604081205491925081900361230657600360405180604001604052808881526020018b8b906122ed9190615817565b6001600160e01b031916815250945094505050506123c9565b60008061231283612860565b9150915060006123238d8b846127aa565b9050600081601381111561233957612339615496565b1461236257604080518082019091528981526000602082015290975095506123c9945050505050565b821561239157600060405180604001604052808b81526020016000801b815250975097505050505050506123c9565b61239f8f868f8f8f8e61288b565b975097505050505050506123c9565b50506040805180820190915282815260006020820152600291505b97509795505050505050565b60006123df614bae565b60405163c7a7b63560e01b81526001600160a01b038a169063c7a7b63590612413908a908a908a908a908a90600401615aad565b600060405180830381865afa92505050801561245157506040513d6000823e601f3d908101601f1916820160405261244e9190810190615ae4565b60015b61246e576040516315e649e960e01b815260040160405180910390fd5b60005b815181101561251457600082828151811061248e5761248e615670565b6020026020010151905060008160600151905060008260800151826124b39190615bbb565b90506124de8d846020015185604001518d8d879087926124d593929190615bce565b88518c516121d8565b909750955060008760138111156124f7576124f7615496565b146125065750505050506123c9565b836001019350505050612471565b505097509795505050505050565b60008083604001516001600160401b03166000148061255c5750836040015184608001516125509190615bf8565b6001600160401b031683105b1561257257505060608201516080830151612610565b600084604001518560800151856125899190615c18565b6125939190615c4e565b90506000816001600160401b031686600001516125b09190615c74565b86606001516125bf9190615c97565b905085602001516001600160801b0316816001600160801b0316106125e85785602001516125ea565b805b93508560400151826125fc9190615cb7565b866080015161260b9190615bf8565b925050505b9250929050565b600080612623836128ee565b90506000612688828051602091820120604080516001600160f81b03198185015273ce0042b868300000d44a59004da54a005ffdcf9f60601b602182015260006035820152605580820193909352815180820390930183526075019052805191012090565b9050803b60008181036127195760405163257b1f8160e11b815273ce0042b868300000d44a59004da54a005ffdcf9f90634af63f02906126cf908790600090600401615cda565b6020604051808303816000875af11580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190615cfc565b905061271c565b50815b806001600160a01b0316836001600160a01b03161461273d5761273d615865565b5090949350505050565b60006001600160a01b03821660e084600381111561276757612767615496565b60f087901b911b171790505b9392505050565b600054610100900460ff166127a15760405162461bcd60e51b81526004016107e990615a39565b610bf33361200e565b600080841180156127cd575060018260038111156127ca576127ca615496565b14155b80156127eb575060038260038111156127e8576127e8615496565b14155b156127f857506004612773565b600183600181111561280c5761280c615496565b14801561282b5750600282600381111561282857612828615496565b14155b80156128495750600382600381111561284657612846615496565b14155b1561285657506001612773565b5060009392505050565b600160d81b81161515600060e083901c60ff16600381111561288457612884615496565b9050915091565b6000612895614bae565b6000806128a28a8a612926565b9150915060006128b3888885612af7565b90506128db89898986858b516000146128d5576128d08c89612b51565b612e83565b87612e83565b945094505050505b965096945050505050565b6060815160016128fe9190615bbb565b82604051602001612910929190615d19565b6040516020818303038152906040529050919050565b612952604080516080810190915280600081526020016000815260006020820152606060409091015290565b600082815260028401602052604081205460609160f082901c916001600160a01b03169061297f82613134565b905060008061298e83866131ad565b915091506000805b8351811015612ab55760008482815181106129b3576129b3615670565b6020026020010151604001519050601c601f8111156129d4576129d4615496565b81601f8111156129e6576129e6615496565b106129fb576129f4836157e1565b9250612aac565b600f81601f811115612a0f57612a0f615496565b03612aac576010858381518110612a2857612a28615670565b602002602001015160400190601f811115612a4557612a45615496565b9081601f811115612a5857612a58615496565b905250606654604051612a77916001600160a01b031690602001614cde565b60405160208183030381529060405280519060200120848381518110612a9f57612a9f615670565b6020026020010181815250505b50600101612996565b50612acc8383612ac4866133a0565b60008c6134f5565b8760008211612adb5787612ae6565b612ae68484846136d5565b975097505050505050509250929050565b612b1b60405180606001604052806000815260200160008152602001606081525090565b6000612b26836138c1565b9050612b3e8585600484856020015151600088613a51565b5060008152602081019290925250919050565b60608251600003612b635750806108ca565b8151600003612b735750816108ca565b81518351612b819190615bbb565b6001600160401b03811115612b9857612b98614ef9565b604051908082528060200260200182016040528015612be357816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181612bb65790505b50835190915060005b81811015612cdc57848181518110612c0657612c06615670565b602002602001015160000151838281518110612c2457612c24615670565b60200260200101516000018181525050848181518110612c4657612c46615670565b602002602001015160200151838281518110612c6457612c64615670565b6020026020010151602001906001600160801b031690816001600160801b031681525050848181518110612c9a57612c9a615670565b602002602001015160400151838281518110612cb857612cb8615670565b60209081029190910101516001600160801b03909116604090910152600101612bec565b5060005b8351811015612e6e57600080612d1387878581518110612d0257612d02615670565b602002602001015160000151613c03565b915091508015612d7657858381518110612d2f57612d2f615670565b602002602001015160400151858381518110612d4d57612d4d615670565b6020026020010151604001818151612d659190615c97565b6001600160801b0316905250612e64565b858381518110612d8857612d88615670565b602002602001015160000151858581518110612da657612da6615670565b60200260200101516000018181525050858381518110612dc857612dc8615670565b602002602001015160200151858581518110612de657612de6615670565b6020026020010151602001906001600160801b031690816001600160801b031681525050858381518110612e1c57612e1c615670565b602002602001015160400151858581518110612e3a57612e3a615670565b60209081029190910101516001600160801b0390911660409091015283612e60816157e1565b9450505b5050600101612ce0565b508151811015612e7c578082525b5092915050565b6000612e8d614bae565b6020850151601081601f811115612ea657612ea6615496565b101561300757600081601f811115612ec057612ec0615496565b03612ee45750506040805180820190915282815260006020820181905291506128e3565b600581601f811115612ef857612ef8615496565b03612f1557612f0b898989898989613c5b565b92509250506128e3565b600181601f811115612f2957612f29615496565b03612f3c57612f0b898989898989613d4b565b600281601f811115612f5057612f50615496565b03612f6357612f0b898989898989613dff565b600381601f811115612f7757612f77615496565b03612f8a57612f0b898989898989613e9f565b600681601f811115612f9e57612f9e615496565b03612fb157612f0b898989898989613f50565b600781601f811115612fc557612fc5615496565b03612fd857612f0b89898989898961400e565b600881601f811115612fec57612fec615496565b14612ff957612ff9615865565b612f0b8989898989896140bd565b601281601f81111561301b5761301b615496565b1161304e5761302c88888888614211565b60405180604001604052808681526020016000801b81525092509250506128e3565b601481601f81111561306257613062615496565b116130735761302c8888888861431c565b601581601f81111561308757613087615496565b036130985761302c8888888861439f565b601681601f8111156130ac576130ac615496565b036130bf57612f0b898989898989614480565b601c81601f8111156130d3576130d3615496565b036130e557612f0b8888888888614561565b601d81601f8111156130f9576130f9615496565b0361310957612f0b898786614598565b601e81601f81111561311d5761311d615496565b1461312a5761312a615865565b612f0b86856145e0565b6060813b6001811161314857613148615865565b600160006131568284615d70565b9050806001600160401b0381111561317057613170614ef9565b6040519080825280601f01601f19166020018201604052801561319a576020820181803683370190505b509350808260208601873c505050919050565b606080826001600160401b038111156131c8576131c8614ef9565b60405190808252806020026020018201604052801561320157816020015b6131ee614bc6565b8152602001906001900390816131e65790505b509150826001600160401b0381111561321c5761321c614ef9565b604051908082528060200260200182016040528015613245578160200160208202803683370190505b5090506000602081613258600287615d83565b613263906020615bbb565b905060005b8681101561339557878301519350613281600284615bbb565b925060008460f01c9050600087838151811061329f5761329f615670565b6020908102919091010151600883901c60ff1681529050600582811c600716908111156132ce576132ce615496565b816020019060058111156132e4576132e4615496565b908160058111156132f7576132f7615496565b905250601f8281169081111561330f5761330f615496565b8160400190601f81111561332557613325615496565b9081601f81111561333857613338615496565b90525060108160400151601f81111561335357613353615496565b1061338b57898401519550613369602085615bbb565b93508587848151811061337e5761337e615670565b6020026020010181815250505b5050600101613268565b505050509250929050565b8051606090806133b2576133b2615865565b806001600160401b038111156133ca576133ca614ef9565b60405190808252806020026020018201604052801561341f57816020015b61340c60405180606001604052806000815260200160008152602001600081525090565b8152602001906001900390816133e85790505b5091506000198260008151811061343857613438615670565b60209081029190910101515260015b818110156134ee5760001983828151811061346457613464615670565b6020026020010151600001818152505060008385838151811061348957613489615670565b60200260200101516000015160ff16815181106134a8576134a8615670565b602002602001015190506000198160000151036134c3578181525b6134ce826001615bbb565b6020820181905281516134e091615d70565b604090910152600101613447565b5050919050565b600085838151811061350957613509615670565b6020026020010151905080602001518260000190600581111561352e5761352e615496565b9081600581111561354157613541615496565b90525060408101516020830190601f81111561355f5761355f615496565b9081601f81111561357257613572615496565b8152505084838151811061358857613588615670565b60200260200101518260400181815250508383815181106135ab576135ab615670565b6020026020010151604001516000036135c457506136ce565b60008484815181106135d8576135d8615670565b602002602001015160000151905060008585815181106135fa576135fa615670565b6020026020010151604001519050806001600160401b0381111561362057613620614ef9565b60405190808252806020026020018201604052801561367d57816020015b61366a604080516080810190915280600081526020016000815260006020820152606060409091015290565b81526020019060019003908161363e5790505b50606085015260005b818110156136c9576136c189898961369e8588615bbb565b896060015186815181106136b4576136b4615670565b60200260200101516134f5565b600101613686565b505050505b5050505050565b8251606090826001600160401b038111156136f2576136f2614ef9565b60405190808252806020026020018201604052801561373d57816020015b60408051606081018252600080825260208083018290529282015282526000199092019101816137105790505b5091506000805b828110156138ab57601c87828151811061376057613760615670565b602002602001015160400151601f81111561377d5761377d615496565b1061389b57600086828151811061379657613796615670565b6020026020010151905060006137ac8683613c03565b91505080156137bc57505061389b565b818685815181106137cf576137cf615670565b602090810291909101810151919091526000838152606a8252604090819020815160a08101835281546001600160801b038082168352600160801b9091048116948201949094526001909101546001600160401b0380821693830193909352600160401b81049093166060820152600160c01b9092041660808201526138559042612522565b5086858151811061386857613868615670565b6020026020010151602001816001600160801b03166001600160801b0316815250508380613895906157e1565b94505050505b6138a4816157e1565b9050613744565b50838110156138b8578083525b50509392505050565b6138c9614bf0565b60018260200151601f8111156138e1576138e1615496565b10158015613905575060038260200151601f81111561390257613902615496565b11155b156139465760008260600151511161391f5761391f615865565b6108ca826060015160008151811061393957613939615670565b60200260200101516138c1565b81518190600581111561395b5761395b615496565b9081600581111561396e5761396e615496565b90525060608201515115613a4c57600060048351600581111561399357613993615496565b146139a3578260600151516139a6565b60015b9050806001600160401b038111156139c0576139c0614ef9565b6040519080825280602002602001820160405280156139f957816020015b6139e6614bf0565b8152602001906001900390816139de5790505b50602083015260005b818110156134ee57613a238460600151828151811061393957613939615670565b83602001518281518110613a3957613a39615670565b6020908102919091010152600101613a02565b919050565b826001600160401b03811115613a6957613a69614ef9565b604051908082528060200260200182016040528015613abe57816020015b613aab60405180606001604052806000815260200160008152602001606081525090565b815260200190600190039081613a875790505b50604082015260008215613af657613af38560200151600081518110613ae657613ae6615670565b6020026020010151614627565b90505b6000805b85811015613bf75784613b2357613b2087602001518281518110613ae657613ae6615670565b92505b613b838a8a613b358d8d8d888a6146f5565b8a6020015189613b455785613b48565b60005b81518110613b5857613b58615670565b602002602001015188604001518681518110613b7657613b76615670565b6020026020010151614733565b600084604001518281518110613b9b57613b9b615670565b602002602001015160200151905083613bbe57613bb9816020615bbb565b613bc0565b805b85602001818151613bd19190615bbb565b90525083613be0576020613be2565b805b613bec9084615bbb565b925050600101613afa565b50505050505050505050565b81516000908190815b81811015613c4d5784868281518110613c2757613c27615670565b60200260200101516000015103613c45579250600191506126109050565b600101613c0c565b506000958695509350505050565b6000613c65614bae565b60408051808201825284815260006020820152908501515160608701515114613c9357600a925090506128e3565b60005b866060015151811015613d3a57613cef8a8a8a8a606001518581518110613cbf57613cbf615670565b60200260200101518a604001518681518110613cdd57613cdd615670565b60200260200101518760000151612e83565b90945091506000846013811115613d0857613d08615496565b14613d325783604051806040016040528087815260200184602001518152509350935050506128e3565b600101613c96565b506000999098509650505050505050565b6000613d55614bae565b50604080518082019091528281526000602082018190525b856060015151811015613def57613da989898989606001518581518110613d9657613d96615670565b6020026020010151898760000151612e83565b90935091506000836013811115613dc257613dc2615496565b14613de7575060408051808201909152838152602091820151918101919091526128e3565b600101613d6d565b5060009150965096945050505050565b6000613e09614bae565b60005b856060015151811015613e7b57600080613e478b8b8b8b606001518781518110613e3857613e38615670565b60200260200101518b8b612e83565b90925090506000826013811115613e6057613e60615496565b03613e715790935091506128e39050565b5050600101613e0c565b50506040805180820190915291825250600060208201526005969095509350505050565b6000613ea9614bae565b60005b856060015151811015613f2c576000613ee68a8a8a8a606001518681518110613ed757613ed7615670565b60200260200101518a8a612e83565b5090506000816013811115613efd57613efd615496565b03613f2357505060408051808201909152838152600060208201526006925090506128e3565b50600101613eac565b50506040805180820190915291825250600060208201819052969095509350505050565b6000613f5a614bae565b60005b846040015151811015613fea57600080613fb68b8b8b8b60600151600081518110613f8a57613f8a615670565b60200260200101518b604001518881518110613fa857613fa8615670565b60200260200101518b612e83565b90925090506000826013811115613fcf57613fcf615496565b03613fe05790935091506128e39050565b5050600101613f5d565b5050604080518082019091529182525060006020820152600c969095509350505050565b6000614018614bae565b50604080518082019091528281526000602082018190525b846040015151811015613def57614078898989896060015160008151811061405a5761405a615670565b602002602001015189604001518681518110613cdd57613cdd615670565b9093509150600083601381111561409157614091615496565b146140b55750506040805180820190915282815260006020820152600b91506128e3565b600101614030565b60006140c7614bae565b5060408051808201825283815260006020820152908401515115806140f55750846060015151846040015151115b1561410357600d91506128e3565b6000805b856040015151811015614200576000805b8860600151518110156141c6576001811b84166000036141b6576000806141818e8e8e8e60600151878151811061415157614151615670565b60200260200101518e604001518a8151811061416f5761416f615670565b60200260200101518c60000151612e83565b9092509050600082601381111561419a5761419a615496565b036141b357955050600180821b949094179391506141c6565b50505b6141bf816157e1565b9050614118565b50806141ef5750506040805180820190915284815260006020820152600d935091506128e39050565b506141f9816157e1565b9050614107565b506000925050965096945050505050565b602082015160408301516000919082601083601f81111561423457614234615496565b1461424d5761424888888760000151614891565b614278565b6142618888876000015188602001516148c9565b60405161426f929190615d9a565b60405180910390205b9050601083601f81111561428e5761428e615496565b14801561429b5750818114155b156142ac5760079350505050611fe6565b601183601f8111156142c0576142c0615496565b1480156142cd5750818111155b156142de5760089350505050611fe6565b601283601f8111156142f2576142f2615496565b1480156142ff5750818110155b156143105760099350505050611fe6565b60009350505050611fe6565b6020820151604083015182516000929190839061433c9089908990614891565b9050601383601f81111561435257614352615496565b14801561435f5750818113155b156143705760089350505050611fe6565b601483601f81111561438457614384615496565b1480156142ff57508181126143105760099350505050611fe6565b6040820151600090816001855160058111156143bd576143bd615496565b14905036600061440c8989856143d45760206143d7565b60005b89516143e69160ff1690615bbb565b866143f25760206143f5565b60005b60ff168a602001516144079190615d70565b6148c9565b909250905060f084901c81811061442b57600e95505050505050611fe6565b6001600160881b0319601086901b8116608887901b821660006144508686818a615bce565b61445991615daa565b9050818382161461446b57600f61446e565b60005b9e9d5050505050505050505050505050565b600061448a614bae565b6000856040015160601c90506000866040015160001c60a01b9050600080836001600160a01b031663416ad87a8d8d8d8c600001518d60200151896040518763ffffffff1660e01b81526004016144e696959493929190615dc8565b6040805180830381865afa158015614502573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906145269190615e0a565b9150915081614536576010614539565b60005b6040518060400160405280898152602001838152509550955050505050965096945050505050565b600061456b614bae565b600061457c88888760000151614891565b90506145898187866148f3565b92509250509550959350505050565b60006145a2614bae565b6145ad8585856148f3565b909250905060008260138111156145c6576145c6615496565b146145d25760136145d5565b60005b91505b935093915050565b60006145ea614bae565b6145f6600185856148f3565b9092509050600082601381111561460f5761460f615496565b1461461b57601261461e565b60005b91509250929050565b8051600090600181600581111561464057614640615496565b0361464e5750600192915050565b600281600581111561466257614662615496565b148061467f5750600481600581111561467d5761467d615496565b145b8061469b5750600581600581111561469957614699615496565b145b156146a95750600092915050565b60208301515160005b818110156146ea576146d385602001518281518110613ae657613ae6615670565b6146e257506000949350505050565b6001016146b2565b506001949350505050565b6000806147028486615bbb565b9050821561471157905061472a565b61471c878783614891565b6147269086615bbb565b9150505b95945050505050565b8151600181600581111561474957614749615496565b0361475957602082810152614887565b600281600581111561476d5761476d615496565b0361479a57614785614780878787614891565b614a21565b614790906020615bbb565b6020830152614887565b60038160058111156147ae576147ae615496565b036147cd576147c886868686876020015151600088613a51565b614887565b60048160058111156147e1576147e1615496565b036148255761480a86866147f6876020615bbb565b866148028b8b8b614891565b600188613a51565b60208260200181815161481d9190615bbb565b905250614887565b600581600581111561483957614839615496565b0361488757614868868661484e876020615bbb565b614859906004615bbb565b86876020015151600088613a51565b614876614780878787614891565b614881906020615bbb565b60208301525b5091909152505050565b60008261489f836020615bbb565b11156148be57604051631d098e2d60e21b815260040160405180910390fd5b509190910135919050565b3660008584866148d98683615bbb565b926148e693929190615bce565b9150915094509492505050565b60006148fd614bae565b60008061490e858760400151613c03565b915091508061491f5761491f615865565b84828151811061493157614931615670565b6020026020010151602001516001600160801b031685838151811061495857614958615670565b6020026020010151604001516001600160801b0316886149789190615bbb565b11156149bd57601160405180604001604052808781526020018785815181106149a3576149a3615670565b6020026020010151600001518152509350935050506145d8565b6149c685614a50565b9450868583815181106149db576149db615670565b60200260200101516040018181516149f39190615c97565b6001600160801b03169052505060408051808201909152848152600060208201819052935091506145d89050565b600060206001614a318483615bbb565b614a3b9190615d70565b614a459190615e38565b6108ca906020615d83565b8051606090806001600160401b03811115614a6d57614a6d614ef9565b604051908082528060200260200182016040528015614ab857816020015b6040805160608101825260008082526020808301829052928201528252600019909201910181614a8b5790505b50915060005b818110156134ee57838181518110614ad857614ad8615670565b602002602001015160000151838281518110614af657614af6615670565b60200260200101516000018181525050838181518110614b1857614b18615670565b602002602001015160200151838281518110614b3657614b36615670565b6020026020010151602001906001600160801b031690816001600160801b031681525050838181518110614b6c57614b6c615670565b602002602001015160400151838281518110614b8a57614b8a615670565b60209081029190910101516001600160801b03909116604090910152600101614abe565b60408051808201909152606081526000602082015290565b604080516080810190915260008082526020820190815260200160005b8152602001606081525090565b60408051808201909152806000614be3565b6001600160a01b038116811461177d57600080fd5b60008060408385031215614c2a57600080fd5b823591506020830135614c3c81614c02565b809150509250929050565b600060208284031215614c5957600080fd5b813561277381614c02565b80356001600160e01b031981168114613a4c57600080fd5b600080600060608486031215614c9157600080fd5b8335614c9c81614c02565b9250614caa60208501614c64565b91506040840135614cba81614c02565b809150509250925092565b600060208284031215614cd757600080fd5b5035919050565b6001600160a01b0391909116815260200190565b60008083601f840112614d0457600080fd5b5081356001600160401b03811115614d1b57600080fd5b60208301915083602082850101111561261057600080fd5b6002811061177d57600080fd5b801515811461177d57600080fd5b600080600080600080600060c0888a031215614d6957600080fd5b8735614d7481614c02565b96506020880135955060408801356001600160401b03811115614d9657600080fd5b614da28a828b01614cf2565b9096509450506060880135614db681614d33565b92506080880135915060a0880135614dcd81614d40565b8091505092959891949750929550565b60005b83811015614df8578181015183820152602001614de0565b50506000910152565b60008151808452614e19816020860160208601614ddd565b601f01601f19169290920160200192915050565b8215158152604060208201526000611fe66040830184614e01565b600080600080600060808688031215614e6057600080fd5b8535614e6b81614c02565b94506020860135935060408601356001600160401b03811115614e8d57600080fd5b614e9988828901614cf2565b9094509250506060860135614ead81614d33565b809150509295509295909350565b600080600060608486031215614ed057600080fd5b833592506020840135614ee281614c02565b9150614ef060408501614c64565b90509250925092565b634e487b7160e01b600052604160045260246000fd5b604051608081016001600160401b0381118282101715614f3157614f31614ef9565b60405290565b60405160a081016001600160401b0381118282101715614f3157614f31614ef9565b604051601f8201601f191681016001600160401b0381118282101715614f8157614f81614ef9565b604052919050565b60006001600160401b03821115614fa257614fa2614ef9565b5060051b60200190565b803560208110613a4c57600080fd5b60006001600160401b03821115614fd457614fd4614ef9565b50601f01601f191660200190565b600082601f830112614ff357600080fd5b813561500661500182614fbb565b614f59565b81815284602083860101111561501b57600080fd5b816020850160208301376000918101602001919091529392505050565b803560048110613a4c57600080fd5b600080600080600060a0868803121561505f57600080fd5b853594506150706020870135614c02565b6020860135935061508360408701614c64565b92506001600160401b036060870135111561509d57600080fd5b6060860135860187601f8201126150b357600080fd5b6150c06150018235614f89565b81358082526020808301929160051b8401018a8111156150df57600080fd5b602084015b818110156151a6576001600160401b038135111561510157600080fd5b803585016080818e03601f1901121561511957600080fd5b615121614f0f565b602082013560ff81161461513457600080fd5b60208201358152600660408301351061514c57600080fd5b6040820135602082015261516260608301614fac565b60408201526001600160401b036080830135111561517f57600080fd5b6151928e60206080850135850101614fe2565b6060820152855250602093840193016150e4565b50508094505050506151ba60808701615038565b90509295509295909350565b6000806000606084860312156151db57600080fd5b8335925060208401356151ed81614c02565b9150614ef060408501615038565b6000806040838503121561520e57600080fd5b823561521981614c02565b946020939093013593505050565b60008083601f84011261523957600080fd5b5081356001600160401b0381111561525057600080fd5b6020830191508360208260051b850101111561261057600080fd5b60008060008060006060868803121561528357600080fd5b853561528e81614c02565b945060208601356001600160401b03808211156152aa57600080fd5b6152b689838a01615227565b909650945060408801359150808211156152cf57600080fd5b506152dc88828901615227565b969995985093965092949392505050565b6000602082840312156152ff57600080fd5b81356001600160401b0381111561531557600080fd5b611fe684828501614fe2565b80356001600160801b0381168114613a4c57600080fd5b80356001600160401b0381168114613a4c57600080fd5b60008060008060008060c0878903121561536857600080fd5b8635955061537860208801615321565b945061538660408801615321565b935061539460608801615321565b92506153a260808801615338565b91506153b060a08801615338565b90509295509295509295565b600080600080608085870312156153d257600080fd5b8435935060208501356153e481614c02565b92506153f260408601614c64565b915061540060608601615038565b905092959194509250565b604080825283519082018190526000906020906060840190828701845b8281101561544d5781516001600160a01b031684529284019290840190600101615428565b5050506001600160a01b039490941692019190915250919050565b6000806040838503121561547b57600080fd5b823561548681614c02565b91506020830135614c3c81614c02565b634e487b7160e01b600052602160045260246000fd5b600681106154bc576154bc615496565b9052565b602081106154bc576154bc615496565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561556157603f198984030185528151608060ff8251168552888201516155238a8701826154ac565b5087820151615534898701826154c0565b5060609182015191850181905261554d85820183614e01565b9689019694505050908601906001016154f7565b509098975050505050505050565b600481106154bc576154bc615496565b600060a08201878352602060018060a01b03881681850152604063ffffffff60e01b881681860152606060a08187015283885180865260c08801915060c08160051b8901019550848a0160005b828110156156355760bf198a89030184528151608060ff8251168a52888201516155f88a8c01826154ac565b5087820151615609898c01826154c0565b5086820151915080878b0152615621818b0183614e01565b9950505092860192908601906001016155cc565b505050505050508091505061191d608083018461556f565b8381526001600160a01b038316602082015260608101611fe6604083018461556f565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561569857600080fd5b813561277381614d40565b634e487b7160e01b600052601160045260246000fd5b600061ffff8083168181036156d0576156d06156a3565b6001019392505050565b6001600160a01b0386168152606060208083018290529082018590526000906001600160fb1b0386111561570d57600080fd5b8560051b808860808601378301838103608090810160408601528101859052859060009060a0015b8682101561575e57823561574881614d40565b1515815291830191600191909101908301615735565b9a9950505050505050505050565b60008060006060848603121561578157600080fd5b835161578c81614c02565b602085015190935061579d81614c02565b6040850151909250614cba81614c02565b8481526001600160a01b03841660208201526001600160e01b0319831660408201526080810161472a606083018461556f565b6000600182016157f3576157f36156a3565b5060010190565b60006020828403121561580c57600080fd5b815161277381614d40565b6001600160e01b0319813581811691600485101561583f5780818660040360031b1b83161692505b505092915050565b604081016014841061585b5761585b615496565b9281526020015290565b634e487b7160e01b600052600160045260246000fd5b6001600160801b03828116828216039080821115612e7c57612e7c6156a3565b600281106154bc576154bc615496565b6001600160a01b038c81168252602082018c9052610160604083018190526000916158d88483018e614e01565b91506158e7606085018d61589b565b8a60808501528960a08501528860c085015280881660e085015280871661010085015283820361012085015261591d8287614e01565b925080851661014085015250509c9b505050505050505050505050565b60018060a01b03851681528360208201526080604082015260006159616080830185614e01565b905061472a606083018461589b565b600082601f83011261598157600080fd5b815161598f61500182614fbb565b8181528460208386010111156159a457600080fd5b611fe6826020830160208701614ddd565b600080604083850312156159c857600080fd5b82516159d381614d40565b60208401519092506001600160401b038111156159ef57600080fd5b6159fb85828601615970565b9150509250929050565b600060208284031215615a1757600080fd5b81516001600160401b03811115615a2d57600080fd5b611fe684828501615970565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60018060a01b0386168152846020820152608060408201526000615ad5608083018587615a84565b905061191d606083018461589b565b60006020808385031215615af757600080fd5b82516001600160401b03811115615b0d57600080fd5b8301601f81018513615b1e57600080fd5b8051615b2c61500182614f89565b81815260a09182028301840191848201919088841115615b4b57600080fd5b938501935b838510156114185780858a031215615b685760008081fd5b615b70614f37565b8551615b7b81614d33565b815285870151615b8a81614c02565b8188015260408681015190820152606080870151908201526080808701519082015283529384019391850191615b50565b808201808211156108ca576108ca6156a3565b60008085851115615bde57600080fd5b83861115615beb57600080fd5b5050820193919092039150565b6001600160401b03818116838216019080821115612e7c57612e7c6156a3565b6001600160401b03828116828216039080821115612e7c57612e7c6156a3565b634e487b7160e01b600052601260045260246000fd5b60006001600160401b0380841680615c6857615c68615c38565b92169190910492915050565b6001600160801b0381811683821602808216919082811461583f5761583f6156a3565b6001600160801b03818116838216019080821115612e7c57612e7c6156a3565b6001600160401b0381811683821602808216919082811461583f5761583f6156a3565b604081526000615ced6040830185614e01565b90508260208301529392505050565b600060208284031215615d0e57600080fd5b815161277381614c02565b606360f81b815260e083901b6001600160e01b03191660018201526880600e6000396000f360b81b60058201526000600e82018190528251615d6281600f850160208701614ddd565b91909101600f019392505050565b818103818111156108ca576108ca6156a3565b80820281158282048414176108ca576108ca6156a3565b8183823760009101908152919050565b803560208310156108ca57600019602084900360031b1b1692915050565b86815260a060208201526000615de260a083018789615a84565b60408301959095525060608101929092526001600160a01b0319166080909101529392505050565b60008060408385031215615e1d57600080fd5b8251615e2881614d40565b6020939093015192949293505050565b600082615e4757615e47615c38565b50049056fe82eaf0fca2207f91f5027fcf68136c84edb7e928c081c42aa5bbc2a771c7d376a26469706673582212203c89de6fbdf80ff2795147a6273647af5b7403d341c681eb87ab9a5a4561dec964736f6c63430008110033496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206982eaf0fca2207f91f5027fcf68136c84edb7e928c081c42aa5bbc2a771c7d376000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001";