{
  "contractName": "CEGRegistry",
  "abi": [
    {
      "inputs": [],
      "stateMutability": "nonpayable",
      "type": "constructor"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "GrantedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "previousOwner",
          "type": "address"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "OwnershipTransferred",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "RegisteredAsset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": true,
          "internalType": "address",
          "name": "account",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        }
      ],
      "name": "RevokedAccess",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevActor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newActor",
          "type": "address"
        }
      ],
      "name": "UpdatedActor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevBeneficiary",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newBeneficiary",
          "type": "address"
        }
      ],
      "name": "UpdatedBeneficiary",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevEngine",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newEngine",
          "type": "address"
        }
      ],
      "name": "UpdatedEngine",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedFinalizedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "prevObligor",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newObligor",
          "type": "address"
        }
      ],
      "name": "UpdatedObligor",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "indexed": false,
          "internalType": "uint256",
          "name": "statusDate",
          "type": "uint256"
        }
      ],
      "name": "UpdatedState",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "UpdatedTerms",
      "type": "event"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "approveActor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "name": "approvedActors",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "decodeEvent",
      "outputs": [
        {
          "internalType": "enum EventType",
          "name": "",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        },
        {
          "internalType": "uint256",
          "name": "scheduleTime",
          "type": "uint256"
        }
      ],
      "name": "encodeEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getActor",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getAddressValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getBytes32ValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getContractReferenceValueForTermsAttribute",
      "outputs": [
        {
          "components": [
            {
              "internalType": "bytes32",
              "name": "object",
              "type": "bytes32"
            },
            {
              "internalType": "bytes32",
              "name": "object2",
              "type": "bytes32"
            },
            {
              "internalType": "enum ContractReferenceType",
              "name": "_type",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractReferenceRole",
              "name": "role",
              "type": "uint8"
            }
          ],
          "internalType": "struct ContractReference",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getCycleValueForTermsAttribute",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "enum S",
              "name": "s",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IPS",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getEngine",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getEnumValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "enum EventType",
          "name": "eventType",
          "type": "uint8"
        }
      ],
      "name": "getEpochOffset",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "pure",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "uint256",
          "name": "index",
          "type": "uint256"
        }
      ],
      "name": "getEventAtIndex",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getFinalizedState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForStateAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getIntValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextScheduleIndex",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextScheduledEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getNextUnderlyingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getOwnership",
      "outputs": [
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getPendingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getPeriodValueForTermsAttribute",
      "outputs": [
        {
          "components": [
            {
              "internalType": "uint256",
              "name": "i",
              "type": "uint256"
            },
            {
              "internalType": "enum P",
              "name": "p",
              "type": "uint8"
            },
            {
              "internalType": "bool",
              "name": "isSet",
              "type": "bool"
            }
          ],
          "internalType": "struct IP",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getSchedule",
      "outputs": [
        {
          "internalType": "bytes32[]",
          "name": "",
          "type": "bytes32[]"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getScheduleLength",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getState",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "getTerms",
      "outputs": [
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "",
          "type": "tuple"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUIntValueForTermsAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "attribute",
          "type": "bytes32"
        }
      ],
      "name": "getUintValueForStateAttribute",
      "outputs": [
        {
          "internalType": "uint256",
          "name": "",
          "type": "uint256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "grantAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "hasRootAccess",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        }
      ],
      "name": "isEventSettled",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        },
        {
          "internalType": "int256",
          "name": "",
          "type": "int256"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "isRegistered",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "_event",
          "type": "bytes32"
        },
        {
          "internalType": "int256",
          "name": "_payoff",
          "type": "int256"
        }
      ],
      "name": "markEventAsSettled",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "owner",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "popNextScheduledEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        }
      ],
      "name": "popPendingEvent",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes32",
          "name": "pendingEvent",
          "type": "bytes32"
        }
      ],
      "name": "pushPendingEvent",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        },
        {
          "internalType": "bytes32[]",
          "name": "schedule",
          "type": "bytes32[]"
        },
        {
          "components": [
            {
              "internalType": "address",
              "name": "creatorObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "creatorBeneficiary",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyObligor",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "counterpartyBeneficiary",
              "type": "address"
            }
          ],
          "internalType": "struct AssetOwnership",
          "name": "ownership",
          "type": "tuple"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "admin",
          "type": "address"
        }
      ],
      "name": "registerAsset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "renounceOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "bytes4",
          "name": "methodSignature",
          "type": "bytes4"
        },
        {
          "internalType": "address",
          "name": "account",
          "type": "address"
        }
      ],
      "name": "revokeAccess",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "actor",
          "type": "address"
        }
      ],
      "name": "setActor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCounterpartyBeneficiary",
          "type": "address"
        }
      ],
      "name": "setCounterpartyBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCounterpartyObligor",
          "type": "address"
        }
      ],
      "name": "setCounterpartyObligor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCreatorBeneficiary",
          "type": "address"
        }
      ],
      "name": "setCreatorBeneficiary",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "newCreatorObligor",
          "type": "address"
        }
      ],
      "name": "setCreatorObligor",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "internalType": "address",
          "name": "engine",
          "type": "address"
        }
      ],
      "name": "setEngine",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        }
      ],
      "name": "setFinalizedState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractPerformance",
              "name": "contractPerformance",
              "type": "uint8"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "nonPerformingDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "exerciseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "terminationDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "lastCouponDay",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "accruedInterest",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nominalInterestRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "interestScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "notionalScalingMultiplier",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "nextPrincipalRedemptionPayment",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseAmount",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "exerciseQuantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "quantity",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "couponAmountFixed",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "marginFactor",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "adjustmentFactor",
              "type": "int256"
            }
          ],
          "internalType": "struct State",
          "name": "state",
          "type": "tuple"
        }
      ],
      "name": "setState",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "bytes32",
          "name": "assetId",
          "type": "bytes32"
        },
        {
          "components": [
            {
              "internalType": "enum ContractType",
              "name": "contractType",
              "type": "uint8"
            },
            {
              "internalType": "enum Calendar",
              "name": "calendar",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractRole",
              "name": "contractRole",
              "type": "uint8"
            },
            {
              "internalType": "enum DayCountConvention",
              "name": "dayCountConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum BusinessDayConvention",
              "name": "businessDayConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum EndOfMonthConvention",
              "name": "endOfMonthConvention",
              "type": "uint8"
            },
            {
              "internalType": "enum FeeBasis",
              "name": "feeBasis",
              "type": "uint8"
            },
            {
              "internalType": "enum ContractPerformance",
              "name": "creditEventTypeCovered",
              "type": "uint8"
            },
            {
              "internalType": "address",
              "name": "currency",
              "type": "address"
            },
            {
              "internalType": "address",
              "name": "settlementCurrency",
              "type": "address"
            },
            {
              "internalType": "uint256",
              "name": "contractDealDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "statusDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "maturityDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "purchaseDate",
              "type": "uint256"
            },
            {
              "internalType": "uint256",
              "name": "cycleAnchorDateOfFee",
              "type": "uint256"
            },
            {
              "internalType": "int256",
              "name": "notionalPrincipal",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "delinquencyRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeAccrued",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "feeRate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "priceAtPurchaseDate",
              "type": "int256"
            },
            {
              "internalType": "int256",
              "name": "coverageOfCreditEnhancement",
              "type": "int256"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "gracePeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IP",
              "name": "delinquencyPeriod",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "uint256",
                  "name": "i",
                  "type": "uint256"
                },
                {
                  "internalType": "enum P",
                  "name": "p",
                  "type": "uint8"
                },
                {
                  "internalType": "enum S",
                  "name": "s",
                  "type": "uint8"
                },
                {
                  "internalType": "bool",
                  "name": "isSet",
                  "type": "bool"
                }
              ],
              "internalType": "struct IPS",
              "name": "cycleOfFee",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_1",
              "type": "tuple"
            },
            {
              "components": [
                {
                  "internalType": "bytes32",
                  "name": "object",
                  "type": "bytes32"
                },
                {
                  "internalType": "bytes32",
                  "name": "object2",
                  "type": "bytes32"
                },
                {
                  "internalType": "enum ContractReferenceType",
                  "name": "_type",
                  "type": "uint8"
                },
                {
                  "internalType": "enum ContractReferenceRole",
                  "name": "role",
                  "type": "uint8"
                }
              ],
              "internalType": "struct ContractReference",
              "name": "contractReference_2",
              "type": "tuple"
            }
          ],
          "internalType": "struct CEGTerms",
          "name": "terms",
          "type": "tuple"
        }
      ],
      "name": "setTerms",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newOwner",
          "type": "address"
        }
      ],
      "name": "transferOwnership",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    }
  ],
  "bytecode": "0x60806040523480156200001157600080fd5b506000620000276001600160e01b036200007716565b600080546001600160a01b0319166001600160a01b0383169081178255604051929350917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3506200007b565b3390565b61506d806200008b6000396000f3fe608060405234801561001057600080fd5b506004361061030c5760003560e01c80638da5cb5b1161019d578063d51dc3dc116100e9578063e7dc3188116100a2578063ecef55771161007c578063ecef55771461072e578063ee43eda114610741578063f2fde38b14610754578063f52f84e1146107675761030c565b8063e7dc3188146106f5578063e8f7ca3e14610708578063eb0125591461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063def6a06f146106af578063e05a66e0146106c2578063e50e0ef7146106d55761030c565b8063b828204111610156578063bd1f0a6c11610130578063bd1f0a6c1461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063b8282041146105c9578063ba4d2d28146105dc578063bc6a7d76146105fd5761030c565b80638da5cb5b14610548578063a17b75b51461055d578063b02ca0c014610570578063b0b4888f14610583578063b3c45ebe146105a3578063b461dd4f146105b65761030c565b8063512872f41161025c5780636be39bda1161021557806372540003116101ef57806372540003146104ee57806375e86ae41461050f5780637d870dd414610522578063811322fb146105355761030c565b80636be39bda146104a65780636fe55baa146104c6578063715018a6146104e65761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d578063636701c41461048057806367fe5d70146104935780636a899b9b1461046d5761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613c26565b61077a565b005b610339610334366004613bf6565b61084f565b6040516103469190614e49565b60405180910390f35b61036261035d366004613bf6565b610876565b60405161034691906145d1565b61032461037d366004613c26565b6108ed565b610362610390366004613c55565b610992565b6103246103a3366004613ca1565b610a31565b6103bb6103b6366004613ca1565b610ae7565b60405161034691906145b6565b6103bb6103d6366004613bf6565b610b64565b6103626103e9366004613bf6565b610b79565b6103246103fc366004613c26565b610b8e565b61033961040f366004613bf6565b610c69565b610324610422366004613ca1565b610c88565b61043a610435366004613bf6565b610d2d565b6040516103469190614572565b610324610455366004613c26565b610d47565b610324610468366004613c26565b610e0e565b61036261047b366004613c55565b610ee9565b61032461048e366004613d1b565b610f07565b6103246104a1366004613e02565b611016565b6104b96104b4366004613bf6565b6110dc565b6040516103469190614de1565b6104d96104d4366004613c55565b61117a565b6040516103469190614e3b565b610324611219565b6105016104fc366004613bf6565b611298565b604051610346929190614696565b61036261051d366004613bf6565b6112c1565b610324610530366004613e02565b611695565b610362610543366004613e26565b61174e565b61055061175c565b6040516103469190614544565b61036261056b366004613bf6565b61176b565b61036261057e366004613c55565b611780565b610596610591366004613c55565b6117a1565b6040516103469190614e2d565b6105506105b1366004613bf6565b611840565b6103626105c4366004613c55565b61185f565b6103626105d7366004613bf6565b6118a5565b6105ef6105ea366004613c55565b611978565b6040516103469291906145c1565b61061061060b366004613c55565b6119a2565b6040516103469190614e1f565b61032461062b366004613c26565b611a41565b61036261063e366004613bf6565b611ad9565b6103bb610651366004613ba2565b611cd6565b610669610664366004613c55565b611ceb565b6040516103469190614f2e565b610362610684366004613c55565b611d09565b610324610697366004613c55565b611d4f565b6103246106aa366004613c76565b611dbe565b6103246106bd366004613cee565b611e5a565b6103626106d0366004613e45565b611f5a565b6106e86106e3366004613bf6565b611f78565b6040516103469190614b99565b610324610703366004613ba2565b611fd6565b6103bb610716366004613c26565b61202f565b610550610729366004613c55565b612065565b61066961073c366004613c55565b6120fb565b61055061074f366004613bf6565b61218f565b610324610762366004613ba2565b6121af565b610362610775366004613bf6565b612265565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d39061480b565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a20906108419084908790614558565b60405180910390a250505050565b6108576137f2565b600082815260016020526040902061086e9061227a565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d39061480b565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614add565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906145da565b60405180910390a1505050565b6000828152600160205260408082209051632b34c55f60e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__91632b34c55f916109d891908690600401614bd4565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613c0e565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614a8e565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada908690614681565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d3906146ae565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d39061470b565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906145da565b610c716137f2565b600082815260016020526040902061086e90612572565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614a8e565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada908690614681565b600081815260016020526040902060609061086e90612894565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d39061480b565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb906108419084908790614558565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d390614a31565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d3906148f9565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906145da565b6000828152600160205260408120610a28908363ffffffff61292a16565b3360009081526002602052604090205460ff16610f365760405162461bcd60e51b81526004016107d3906148a5565b610f9489610f49368a90038a018a6140db565b888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610f8c9250505036899003890189613e73565b878787612940565b600089815260016020526040908190209051630c41805d60e11b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163188300ba91610fdb91908c90600401614be2565b60006040518083038186803b158015610ff357600080fd5b505af4158015611007573d6000803e3d6000fd5b50505050505050505050505050565b6000828152600160208190526040909120015482906001600160a01b03163314806110535750611053816000356001600160e01b03191633610ae7565b61106f5760405162461bcd60e51b81526004016107d39061480b565b61109b611081368490038401846140db565b60008581526001602052604090209063ffffffff612ac516565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f83602001356040516110cf91906145d1565b60405180910390a2505050565b6110e461388c565b60008281526001602052604090819020905163197bc8e960e21b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__916365ef23a49161112991906004016145d1565b6104e06040518083038186803b15801561114257600080fd5b505af4158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190613edb565b61118261397f565b60008381526001602052604090819020905163bf5f9be360e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163bf5f9be3916111c991908690600401614bd4565b60606040518083038186803b1580156111e157600080fd5b505af41580156111f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906140c0565b611221612df3565b6000546001600160a01b0390811691161461124e5760405162461bcd60e51b81526004016107d39061499f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c8111156112ac57fe5b92505067ffffffffffffffff83169050915091565b60006112cb6139a2565b6112eb8372636f6e74726163745265666572656e63655f3160681b6119a2565b80519091501580159061130d575060038160600151600481111561130b57fe5b145b1561168c5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b22906113459085906004016145d1565b60206040518083038186803b15801561135d57600080fd5b505afa158015611371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113959190613bda565b6113b15760405162461bcd60e51b81526004016107d390614b31565b60006113cc866b65786572636973654461746560a01b610ee9565b905060006113f3877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b6120fb565b60ff16600581111561140157fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b8152600401611431919061465c565b60206040518083038186803b15801561144957600080fd5b505afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148191906141d8565b60ff16600581111561148f57fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016114bf9190614639565b60206040518083038186803b1580156114d757600080fd5b505afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190613c0e565b9050831561153057611522601b42611f5a565b975050505050505050610871565b600083600581111561153e57fe5b14158015611561575082600581111561155357fe5b82600581111561155f57fe5b145b1561168557600182600581111561157457fe5b141561158557611522601a82611f5a565b600282600581111561159357fe5b141561163d576115a161397f565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906115cd908a906004016145f9565b60606040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d91906140c0565b905061162e601a6106d08385612df7565b98505050505050505050610871565b600382600581111561164b57fe5b14156116855761165961397f565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906115cd908a90600401614616565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806116d257506116d2816000356001600160e01b03191633610ae7565b6116ee5760405162461bcd60e51b81526004016107d39061480b565b61171a611700368490038401846140db565b60008581526001602052604090209063ffffffff612f2316565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec683602001356040516110cf91906145d1565b600081601c81111561086e57fe5b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b6117a96139c9565b6000838152600160205260409081902090516319cb3fdf60e31b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163ce59fef8916117f091908690600401614bd4565b60806040518083038186803b15801561180857600080fd5b505af415801561181c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906140a5565b600090815260016020819052604090912001546001600160a01b031690565b6000828152600160205260408082209051631b00116b60e11b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163360022d6916109d891908690600401614bd4565b6000818152600160205260408120816118bd84613219565b600583015460009081526003840160205260409020546004840154919250901580156118e7575081155b156118f9575060009250610871915050565b60008061190584611298565b9150915060008061191585611298565b9150915080600014806119315750821580159061193157508083105b8061195557508083148015611955575061194a8261174e565b6119538561174e565b105b156119695785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b6119aa6139a2565b6000838152600160205260409081902090516326af533960e21b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__91639abd4ce4916119f191908690600401614bd4565b60806040518083038186803b158015611a0957600080fd5b505af4158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a28919061408a565b611a58826000356001600160e01b03191633610ae7565b611a745760405162461bcd60e51b81526004016107d3906147ae565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906145da565b60008181526001602081905260408220015482906001600160a01b0316331480611b155750611b15816000356001600160e01b03191633610ae7565b611b315760405162461bcd60e51b81526004016107d39061480b565b600083815260016020526040812090611b4985613219565b60058301546000908152600384016020526040902054600484015491925090158015611b73575081155b15611b855750600093506108e7915050565b600080611b9184611298565b91509150600080611ba185611298565b9150915084861415611c16578260028801600086601c811115611bc057fe5b601c811115611bcb57fe5b8152602081019190915260400160002055600487015460058801541415611bfd5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c2c57508215801590611c2c57508083105b80611c5057508083148015611c505750611c458261174e565b611c4e8561174e565b105b15611c93578260028801600086601c811115611c6857fe5b601c811115611c7357fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611ca7575060048701546005880154145b15611cbd5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff6133bb16565b600082815260016020526040808220905163af08bc9560e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163af08bc95916109d891908690600401614bd4565b6000828152600160208190526040909120015482906001600160a01b0316331480611d8c5750611d8c816000356001600160e01b03191633610ae7565b611da85760405162461bcd60e51b81526004016107d39061480b565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dfb5750611dfb816000356001600160e01b03191633610ae7565b611e175760405162461bcd60e51b81526004016107d39061480b565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b6000828152600160208190526040909120015482906001600160a01b0316331480611e975750611e97816000356001600160e01b03191633610ae7565b611eb35760405162461bcd60e51b81526004016107d39061480b565b600083815260016020526040908190209051630c41805d60e11b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163188300ba91611efa91908690600401614be2565b60006040518083038186803b158015611f1257600080fd5b505af4158015611f26573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b60008160f884601c811115611f6b57fe5b60ff16901b179392505050565b611f806139ea565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611fde612df3565b6000546001600160a01b0390811691161461200b5760405162461bcd60e51b81526004016107d39061499f565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b6000828152600160205260408082209051636749043d60e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__91636749043d916120ab91908690600401614bd4565b60206040518083038186803b1580156120c357600080fd5b505af41580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613bbe565b600082815260016020526040808220905162908ced60e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9162908ced9161213f91908690600401614bd4565b60206040518083038186803b15801561215757600080fd5b505af415801561216b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906141d8565b60009081526001602052604090205461010090046001600160a01b031690565b6121b7612df3565b6000546001600160a01b039081169116146121e45760405162461bcd60e51b81526004016107d39061499f565b6001600160a01b03811661220a5760405162461bcd60e51b81526004016107d390614768565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b6122826137f2565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c557fe5b60058111156122d057fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257a6137f2565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125bf57fe5b60058111156125ca57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b557600080fd5b506040519080825280602002602001820160405280156128df578160200160208202803683370190505b50905060005b6004840154811015612923576000818152600385016020526040902054825183908390811061291057fe5b60209081029190910101526001016128e5565b5092915050565b6000908152600e91909101602052604090205490565b6000878152600160205260409020805460ff16156129705760405162461bcd60e51b81526004016107d39061485a565b6001600160a01b03831660009081526002602052604090205460ff1615156001146129ad5760405162461bcd60e51b81526004016107d390614956565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b0319166101008884160217845583018054909216908516179055612a4b8188612f23565b612a5b818863ffffffff612ac516565b612a6b818763ffffffff61346716565b6001600160a01b03821615612a8457612a8488836134d4565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd8964688604051612ab391906145d1565b60405180910390a15050505050505050565b612afe8274465f636f6e7472616374506572666f726d616e636560581b60f884600001516005811115612af457fe5b60ff16901b61354b565b612b1f826b465f7374617475734461746560a01b836020015160001b61354b565b612b478272465f6e6f6e506572666f726d696e674461746560681b836040015160001b61354b565b612b6a826d465f6d617475726974794461746560901b836060015160001b61354b565b612b8d826d465f65786572636973654461746560901b836080015160001b61354b565b612bb38270465f7465726d696e6174696f6e4461746560781b8360a0015160001b61354b565b612bdb82721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b61354b565b612c0282701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b61354b565b612c24826b1197d999595058d8dc9d595960a21b83610120015160001b61354b565b612c4f8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b61354b565b612c82827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b61354b565b612cb5827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b61354b565b612ce8827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b61354b565b612d0e826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b61354b565b612d368271465f65786572636973655175616e7469747960701b836101e0015160001b61354b565b612d568269465f7175616e7469747960b01b83610200015160001b61354b565b612d7f82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b61354b565b612da3826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b61354b565b612dcb8271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b61354b565b612def826e465f6c617374436f75706f6e44617960881b8360c0015160001b61354b565b5050565b3390565b6000808084602001516005811115612e0b57fe5b1415612e2b578351612e2490849063ffffffff61357d16565b9050610a28565b600184602001516005811115612e3d57fe5b1415612e59578351612e2490849060070263ffffffff61357d16565b600284602001516005811115612e6b57fe5b1415612e84578351612e2490849063ffffffff61359216565b600384602001516005811115612e9657fe5b1415612eb2578351612e2490849060030263ffffffff61359216565b600484602001516005811115612ec457fe5b1415612ee0578351612e2490849060060263ffffffff61359216565b600584602001516005811115612ef257fe5b1415612f0b578351612e2490849063ffffffff61360e16565b60405162461bcd60e51b81526004016107d3906149d4565b612f508272636f6e7472616374506572666f726d616e636560681b60f884600001516005811115612af457fe5b612f6f82697374617475734461746560b01b836020015160001b61354b565b612f9582706e6f6e506572666f726d696e674461746560781b836040015160001b61354b565b612fb6826b6d617475726974794461746560a01b836060015160001b61354b565b612fd7826b65786572636973654461746560a01b836080015160001b61354b565b612ffb826e7465726d696e6174696f6e4461746560881b8360a0015160001b61354b565b61302182701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b61354b565b613046826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b61354b565b61306682691999595058d8dc9d595960b21b83610120015160001b61354b565b61308f82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b61354b565b6130be827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b61354b565b6130ed82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b61354b565b613120827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b61354b565b613144826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b61354b565b61316a826f65786572636973655175616e7469747960801b836101e0015160001b61354b565b61318882677175616e7469747960c01b83610200015160001b61354b565b6131af827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b61354b565b6131d1826b36b0b933b4b72330b1ba37b960a11b83610240015160001b61354b565b6131f7826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b61354b565b612def826c6c617374436f75706f6e44617960981b8360c0015160001b61354b565b600081815260016020526040812061322f61388c565b60405163197bc8e960e21b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__906365ef23a4906132669085906004016145d1565b6104e06040518083038186803b15801561327f57600080fd5b505af4158015613293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b79190613edb565b82549091506000908190819081906133639061010090046001600160a01b031663b90f73688760028a0185600381526020019081526020016000205460036040518463ffffffff1660e01b815260040161331393929190614df0565b60206040518083038186803b15801561332b57600080fd5b505afa15801561333f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc9190613c0e565b91509150826000148061337557508281105b8061339957508083148015613399575061338e8461174e565b6133978361174e565b105b156133a5578092508193505b50506133b18282611f5a565b9695505050505050565b600072636f6e7472616374506572666f726d616e636560681b82141561340c575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b82141561345f575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b60005b81518110156134cf576000801b82828151811061348357fe5b60200260200101511415613496576134cf565b8181815181106134a257fe5b6020908102919091018101516000838152600386019092526040909120556001016004830181905561346a565b505050565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659161353f91614681565b60405180910390a35050565b6000828152600e84016020526040902054811415613568576134cf565b6000918252600e929092016020526040902055565b620151808102820182811015610a2b57600080fd5b60008080806135a662015180875b04613635565b600c9188016000198101838104949094019650945092509006600101915060006135d084846136cb565b9050808211156135de578091505b620151808706620151806135f3868686613751565b020194508685101561360457600080fd5b5050505092915050565b600080808061362062015180876135a0565b91870194509250905060006135d084846136cb565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161368c57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806136dc5750816003145b806136e75750816005145b806136f25750816007145b806136fd5750816008145b80613708575081600a145b80613713575081600c145b156137205750601f610a2b565b816002146137305750601e610a2b565b613739836137cd565b61374457601c613747565b601d5b60ff169392505050565b60006107b284101561376257600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161379e57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000600482061580156137e257506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051610340810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161394661397f565b815260200161395361397f565b81526020016139606139c9565b815260200161396d6139a2565b815260200161397a6139a2565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b6040805160808101825260008082526020820181905290918201908152602001600061397a565b60408051608081019091526000808252602082019081526020016000613995565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b81614fc6565b8051610a2b81614fc6565b8051610a2b81614fe9565b8051610a2b81614ff6565b8035610a2b81615003565b8051610a2b81615003565b8051610a2b8161501d565b8035610a2b8161502a565b8051610a2b8161502a565b6000608082840312156108e7578081fd5b60006104e082840312156108e7578081fd5b600060808284031215613aa8578081fd5b613ab26080614f3c565b905081518152602082015160208201526040820151613ad081615010565b60408201526060820151613ae381615010565b606082015292915050565b600060808284031215613aff578081fd5b613b096080614f3c565b9050815181526020820151613b1d81615003565b60208201526040820151613b3081614ff6565b60408201526060820151613ae381614fdb565b600060608284031215613b54578081fd5b613b5e6060614f3c565b9050815181526020820151613b7281615003565b60208201526040820151613b8581614fdb565b604082015292915050565b600061028082840312156108e7578081fd5b600060208284031215613bb3578081fd5b8135610a2881614fc6565b600060208284031215613bcf578081fd5b8151610a2881614fc6565b600060208284031215613beb578081fd5b8151610a2881614fdb565b600060208284031215613c07578081fd5b5035919050565b600060208284031215613c1f578081fd5b5051919050565b60008060408385031215613c38578081fd5b823591506020830135613c4a81614fc6565b809150509250929050565b60008060408385031215613c67578182fd5b50508035926020909101359150565b600080600060608486031215613c8a578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613cb5578081fd5b8335925060208401356001600160e01b031981168114613cd3578182fd5b91506040840135613ce381614fc6565b809150509250925092565b6000806105008385031215613d01578182fd5b82359150613d128460208501613a85565b90509250929050565b60008060008060008060008060006108808a8c031215613d39578687fd5b89359850613d4a8b60208c01613a85565b9750613d5a8b6105008c01613b90565b96506107808a013567ffffffffffffffff80821115613d77578687fd5b818c018d601f820112613d88578788fd5b8035925081831115613d98578788fd5b8d60208085028301011115613dab578788fd5b6020019750909550613dc390508b6107a08c01613a74565b9350613dd38b6108208c01613a11565b9250613de38b6108408c01613a11565b9150613df38b6108608c01613a11565b90509295985092959850929598565b6000806102a08385031215613e15578182fd5b82359150613d128460208501613b90565b600060208284031215613e37578081fd5b8135601d8110610a28578182fd5b60008060408385031215613e57578182fd5b8235601d8110613e65578283fd5b946020939093013593505050565b600060808284031215613e84578081fd5b613e8e6080614f3c565b8235613e9981614fc6565b81526020830135613ea981614fc6565b60208201526040830135613ebc81614fc6565b60408201526060830135613ecf81614fc6565b60608201529392505050565b60006104e08284031215613eed578081fd5b613ef8610340614f3c565b613f028484613a69565b8152613f118460208501613a32565b6020820152613f238460408501613a53565b6040820152613f358460608501613a48565b6060820152613f478460808501613a27565b6080820152613f598460a08501613a32565b60a0820152613f6b8460c08501613a32565b60c0820152613f7d8460e08501613a48565b60e0820152610100613f9185828601613a1c565b90820152610120613fa485858301613a1c565b908201526101408381015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a061403085828601613b43565b9082015261030061404385858301613b43565b6102c0830152614057856103608601613aee565b6102e083015261406b856103e08601613a97565b9082015261407d846104608501613a97565b6103208201529392505050565b60006080828403121561409b578081fd5b610a288383613a97565b6000608082840312156140b6578081fd5b610a288383613aee565b6000606082840312156140d1578081fd5b610a288383613b43565b60006102808083850312156140ee578182fd5b6140f781614f3c565b6141018585613a3d565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b6000602082840312156141e9578081fd5b815160ff81168114610a28578182fd5b6001600160a01b03169052565b6009811061421057fe5b9052565b61421081614faf565b61421081614fbc565b600d811061421057fe5b6013811061421057fe5b614245828251614230565b60208101516142576020840182614214565b50604081015161426a6040840182614226565b50606081015161427d606084018261421d565b5060808101516142906080840182614206565b5060a08101516142a360a0840182614214565b5060c08101516142b660c0840182614214565b5060e08101516142c960e084018261421d565b50610100808201516142dd828501826141f9565b5050610120808201516142f2828501826141f9565b50506101408181015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015190830152610200808201519083015261022080820151908301526102408082015190830152610260808201519083015261028080820151908301526102a08082015161438082850182614520565b50506102c081015161030061439781850183614520565b6102e083015191506143ad6103608501836144ae565b82015190506143c06103e0840182614421565b506103208101516134cf610460840182614421565b803582526020810135602083015260408101356143f181615010565b6143fa81614fa4565b604084015250606081013561440e81615010565b61441781614fa4565b6060840152505050565b805182526020810151602083015261443c6040820151614fa4565b604083015261444e6060820151614fa4565b60608301525050565b80358252602081013561446981615003565b61447281614fbc565b6020830152604081013561448581614ff6565b61448e81614faf565b604083015260608101356144a181614fdb565b8015156060840152505050565b8051825260208101516144c081614fbc565b602083015260408101516144d381614faf565b60408301526060908101511515910152565b8035825260208101356144f781615003565b61450081614fbc565b6020830152604081013561451381614fdb565b8015156040840152505050565b80518252602081015161453281614fbc565b60208301526040908101511515910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156145aa5783518352928401929184019160010161458e565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101601d84106146a457fe5b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b8281526105008101602083810190614c05908401614c008387613a5e565b614230565b614c0f8185614f7d565b614c1c6040850182614214565b5050614c2b6040840184614f97565b614c386060840182614226565b50614c466060840184614f8a565b614c53608084018261421d565b50614c616080840184614f70565b614c6e60a0840182614206565b50614c7c60a0840184614f7d565b614c8960c0840182614214565b50614c9760c0840184614f7d565b614ca460e0840182614214565b50614cb260e0840184614f8a565b610100614cc18185018361421d565b614ccd81860186614f63565b915050610120614cdf818501836141f9565b614ceb81860186614f63565b915050610140614cfd818501836141f9565b610160915080850135828501525061018081850135818501526101a091508085013582850152506101c081850135818501526101e09150808501358285015250610200818501358185015261022091508085013582850152506102408185013581850152610260915080850135828501525061028081850135818501526102a09150808501358285015250614d986102c084018286016144e5565b50614dab610320830161030085016144e5565b614dbd61038083016103608501614457565b614dcf61040083016103e085016143d5565b610b5d610480830161046085016143d5565b6104e08101610a2b828461423a565b6105208101614dff828661423a565b836104e0830152601d8310614e1057fe5b82610500830152949350505050565b60808101610a2b8284614421565b60808101610a2b82846144ae565b60608101610a2b8284614520565b600061028082019050614e5d82845161421d565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614f5b57600080fd5b604052919050565b60008235610a2881614fc6565b60008235610a2881614fe9565b60008235610a2881614ff6565b60008235610a2881615003565b60008235610a288161501d565b806005811061087157fe5b60028110614fb957fe5b50565b60068110614fb957fe5b6001600160a01b0381168114614fb957600080fd5b8015158114614fb957600080fd5b60098110614fb957600080fd5b60028110614fb957600080fd5b60068110614fb957600080fd5b60058110614fb957600080fd5b600d8110614fb957600080fd5b60138110614fb957600080fdfea2646970667358221220624a1a0796a4821e65cd4868bc3724f1a8266de638eda9266b257bdbf8f1c28064736f6c634300060b0033",
  "deployedBytecode": "0x608060405234801561001057600080fd5b506004361061030c5760003560e01c80638da5cb5b1161019d578063d51dc3dc116100e9578063e7dc3188116100a2578063ecef55771161007c578063ecef55771461072e578063ee43eda114610741578063f2fde38b14610754578063f52f84e1146107675761030c565b8063e7dc3188146106f5578063e8f7ca3e14610708578063eb0125591461071b5761030c565b8063d51dc3dc14610676578063d981e77314610689578063de07a1731461069c578063def6a06f146106af578063e05a66e0146106c2578063e50e0ef7146106d55761030c565b8063b828204111610156578063bd1f0a6c11610130578063bd1f0a6c1461061d578063c3b6e7c214610630578063ccfc347e14610643578063cf5aed12146106565761030c565b8063b8282041146105c9578063ba4d2d28146105dc578063bc6a7d76146105fd5761030c565b80638da5cb5b14610548578063a17b75b51461055d578063b02ca0c014610570578063b0b4888f14610583578063b3c45ebe146105a3578063b461dd4f146105b65761030c565b8063512872f41161025c5780636be39bda1161021557806372540003116101ef57806372540003146104ee57806375e86ae41461050f5780637d870dd414610522578063811322fb146105355761030c565b80636be39bda146104a65780636fe55baa146104c6578063715018a6146104e65761030c565b8063512872f4146104475780636031a0941461045a578063606aa07e1461046d578063636701c41461048057806367fe5d70146104935780636a899b9b1461046d5761030c565b80631b126815116102c95780633549d08d116102a35780633549d08d146103ee57806337462dba1461040157806339262e87146104145780633adc277a146104275761030c565b80631b126815146103a857806327258b22146103c857806328e0f8a9146103db5761030c565b806303a81a2a1461031157806309648a9d146103265780630c5b75a41461034f5780630d62037a1461036f578063135b9f4d146103825780631717e86714610395575b600080fd5b61032461031f366004613c26565b61077a565b005b610339610334366004613bf6565b61084f565b6040516103469190614e49565b60405180910390f35b61036261035d366004613bf6565b610876565b60405161034691906145d1565b61032461037d366004613c26565b6108ed565b610362610390366004613c55565b610992565b6103246103a3366004613ca1565b610a31565b6103bb6103b6366004613ca1565b610ae7565b60405161034691906145b6565b6103bb6103d6366004613bf6565b610b64565b6103626103e9366004613bf6565b610b79565b6103246103fc366004613c26565b610b8e565b61033961040f366004613bf6565b610c69565b610324610422366004613ca1565b610c88565b61043a610435366004613bf6565b610d2d565b6040516103469190614572565b610324610455366004613c26565b610d47565b610324610468366004613c26565b610e0e565b61036261047b366004613c55565b610ee9565b61032461048e366004613d1b565b610f07565b6103246104a1366004613e02565b611016565b6104b96104b4366004613bf6565b6110dc565b6040516103469190614de1565b6104d96104d4366004613c55565b61117a565b6040516103469190614e3b565b610324611219565b6105016104fc366004613bf6565b611298565b604051610346929190614696565b61036261051d366004613bf6565b6112c1565b610324610530366004613e02565b611695565b610362610543366004613e26565b61174e565b61055061175c565b6040516103469190614544565b61036261056b366004613bf6565b61176b565b61036261057e366004613c55565b611780565b610596610591366004613c55565b6117a1565b6040516103469190614e2d565b6105506105b1366004613bf6565b611840565b6103626105c4366004613c55565b61185f565b6103626105d7366004613bf6565b6118a5565b6105ef6105ea366004613c55565b611978565b6040516103469291906145c1565b61061061060b366004613c55565b6119a2565b6040516103469190614e1f565b61032461062b366004613c26565b611a41565b61036261063e366004613bf6565b611ad9565b6103bb610651366004613ba2565b611cd6565b610669610664366004613c55565b611ceb565b6040516103469190614f2e565b610362610684366004613c55565b611d09565b610324610697366004613c55565b611d4f565b6103246106aa366004613c76565b611dbe565b6103246106bd366004613cee565b611e5a565b6103626106d0366004613e45565b611f5a565b6106e86106e3366004613bf6565b611f78565b6040516103469190614b99565b610324610703366004613ba2565b611fd6565b6103bb610716366004613c26565b61202f565b610550610729366004613c55565b612065565b61066961073c366004613c55565b6120fb565b61055061074f366004613bf6565b61218f565b610324610762366004613ba2565b6121af565b610362610775366004613bf6565b612265565b6000828152600160208190526040909120015482906001600160a01b03163314806107b757506107b7816000356001600160e01b03191633610ae7565b6107dc5760405162461bcd60e51b81526004016107d39061480b565b60405180910390fd5b6000838152600160208190526040918290200180546001600160a01b038581166001600160a01b0319831617909255915191169084907f6baefd4565218ab73b43cb6b1019ca3a06161c4fcaef25cd665aacddabc44a20906108419084908790614558565b60405180910390a250505050565b6108576137f2565b600082815260016020526040902061086e9061227a565b90505b919050565b60008181526001602081905260408220015482906001600160a01b03163314806108b257506108b2816000356001600160e01b03191633610ae7565b6108ce5760405162461bcd60e51b81526004016107d39061480b565b6000838152600160205260408120600601805491905591505b50919050565b610904826000356001600160e01b03191633610ae7565b6109205760405162461bcd60e51b81526004016107d390614add565b6000828152600160205260409081902060070180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906145da565b60405180910390a1505050565b6000828152600160205260408082209051632b34c55f60e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__91632b34c55f916109d891908690600401614bd4565b60206040518083038186803b1580156109f057600080fd5b505af4158015610a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613c0e565b90505b92915050565b610a48836000356001600160e01b03191633610ae7565b610a645760405162461bcd60e51b81526004016107d390614a8e565b60008381526001602081815260408084206001600160e01b031987168552600c0182528084206001600160a01b038616808652925292839020805460ff1916909217909155905184907face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb4786590610ada908690614681565b60405180910390a3505050565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516845290915281205460ff1680610b5a57506000848152600160209081526040808320838052600c0182528083206001600160a01b038616845290915290205460ff165b90505b9392505050565b60009081526001602052604090205460ff1690565b60009081526001602052604090206005015490565b6000828152600160205260409020600a01546001600160a01b031680610bc65760405162461bcd60e51b81526004016107d3906146ae565b336001600160a01b0382161480610bef5750610bef836000356001600160e01b03191633610ae7565b610c0b5760405162461bcd60e51b81526004016107d39061470b565b60008381526001602052604090819020600a0180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906145da565b610c716137f2565b600082815260016020526040902061086e90612572565b610c9f836000356001600160e01b03191633610ae7565b610cbb5760405162461bcd60e51b81526004016107d390614a8e565b60008381526001602090815260408083206001600160e01b031986168452600c0182528083206001600160a01b038516808552925291829020805460ff19169055905184907f42b1b0e7392ad606bb4f5b003296aba62f16e43aa9372f1f40c1522fa2655ffa90610ada908690614681565b600081815260016020526040902060609061086e90612894565b6000828152600160208190526040909120015482906001600160a01b0316331480610d845750610d84816000356001600160e01b03191633610ae7565b610da05760405162461bcd60e51b81526004016107d39061480b565b6000838152600160205260409081902080546001600160a01b03858116610100908102610100600160a81b03198416179093559251919004919091169084907fdaa92ae0693b6616f14ef5db4b7ee053d3234c0d03f7a1885589c6a6c2c75bdb906108419084908790614558565b6000828152600160205260409020600801546001600160a01b031680610e465760405162461bcd60e51b81526004016107d390614a31565b336001600160a01b0382161480610e6f5750610e6f836000356001600160e01b03191633610ae7565b610e8b5760405162461bcd60e51b81526004016107d3906148f9565b6000838152600160205260409081902060080180546001600160a01b0319166001600160a01b038516179055517f66808241563a07166fd47b523591fa432148706dc0ddd255d49b69e71f1721ce90610985908590849086906145da565b6000828152600160205260408120610a28908363ffffffff61292a16565b3360009081526002602052604090205460ff16610f365760405162461bcd60e51b81526004016107d3906148a5565b610f9489610f49368a90038a018a6140db565b888880806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250610f8c9250505036899003890189613e73565b878787612940565b600089815260016020526040908190209051630c41805d60e11b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163188300ba91610fdb91908c90600401614be2565b60006040518083038186803b158015610ff357600080fd5b505af4158015611007573d6000803e3d6000fd5b50505050505050505050505050565b6000828152600160208190526040909120015482906001600160a01b03163314806110535750611053816000356001600160e01b03191633610ae7565b61106f5760405162461bcd60e51b81526004016107d39061480b565b61109b611081368490038401846140db565b60008581526001602052604090209063ffffffff612ac516565b827f0c71209d22d4c70a40140b94deee55f1f54a9353e3d5d5a4ddfb45fcddcf720f83602001356040516110cf91906145d1565b60405180910390a2505050565b6110e461388c565b60008281526001602052604090819020905163197bc8e960e21b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__916365ef23a49161112991906004016145d1565b6104e06040518083038186803b15801561114257600080fd5b505af4158015611156573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086e9190613edb565b61118261397f565b60008381526001602052604090819020905163bf5f9be360e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163bf5f9be3916111c991908690600401614bd4565b60606040518083038186803b1580156111e157600080fd5b505af41580156111f5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906140c0565b611221612df3565b6000546001600160a01b0390811691161461124e5760405162461bcd60e51b81526004016107d39061499f565b600080546040516001600160a01b03909116907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600080546001600160a01b0319169055565b6000808060f884901c601c8111156112ac57fe5b92505067ffffffffffffffff83169050915091565b60006112cb6139a2565b6112eb8372636f6e74726163745265666572656e63655f3160681b6119a2565b80519091501580159061130d575060038160600151600481111561130b57fe5b145b1561168c5780516020820151604051631392c59160e11b81526001600160a01b038216906327258b22906113459085906004016145d1565b60206040518083038186803b15801561135d57600080fd5b505afa158015611371573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113959190613bda565b6113b15760405162461bcd60e51b81526004016107d390614b31565b60006113cc866b65786572636973654461746560a01b610ee9565b905060006113f3877518dc99591a5d115d995b9d151e5c1950dbdd995c995960521b6120fb565b60ff16600581111561140157fe5b90506000836001600160a01b031663cf5aed12866040518263ffffffff1660e01b8152600401611431919061465c565b60206040518083038186803b15801561144957600080fd5b505afa15801561145d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148191906141d8565b60ff16600581111561148f57fe5b90506000846001600160a01b031663606aa07e876040518263ffffffff1660e01b81526004016114bf9190614639565b60206040518083038186803b1580156114d757600080fd5b505afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f9190613c0e565b9050831561153057611522601b42611f5a565b975050505050505050610871565b600083600581111561153e57fe5b14158015611561575082600581111561155357fe5b82600581111561155f57fe5b145b1561168557600182600581111561157457fe5b141561158557611522601a82611f5a565b600282600581111561159357fe5b141561163d576115a161397f565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906115cd908a906004016145f9565b60606040518083038186803b1580156115e557600080fd5b505afa1580156115f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161d91906140c0565b905061162e601a6106d08385612df7565b98505050505050505050610871565b600382600581111561164b57fe5b14156116855761165961397f565b6040516337f2add560e11b81526001600160a01b03871690636fe55baa906115cd908a90600401614616565b5050505050505b50600092915050565b6000828152600160208190526040909120015482906001600160a01b03163314806116d257506116d2816000356001600160e01b03191633610ae7565b6116ee5760405162461bcd60e51b81526004016107d39061480b565b61171a611700368490038401846140db565b60008581526001602052604090209063ffffffff612f2316565b827fad3970329ffaec63d947adc6077368479a4be7f09f2e7ba1b13852f8405b3ec683602001356040516110cf91906145d1565b600081601c81111561086e57fe5b6000546001600160a01b031690565b60009081526001602052604090206004015490565b60009182526001602090815260408084209284526003909201905290205490565b6117a96139c9565b6000838152600160205260409081902090516319cb3fdf60e31b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163ce59fef8916117f091908690600401614bd4565b60806040518083038186803b15801561180857600080fd5b505af415801561181c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906140a5565b600090815260016020819052604090912001546001600160a01b031690565b6000828152600160205260408082209051631b00116b60e11b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163360022d6916109d891908690600401614bd4565b6000818152600160205260408120816118bd84613219565b600583015460009081526003840160205260409020546004840154919250901580156118e7575081155b156118f9575060009250610871915050565b60008061190584611298565b9150915060008061191585611298565b9150915080600014806119315750821580159061193157508083105b8061195557508083148015611955575061194a8261174e565b6119538561174e565b105b156119695785975050505050505050610871565b84975050505050505050610871565b6000918252600160208181526040808520938552600f90930190529120805491015460ff90911691565b6119aa6139a2565b6000838152600160205260409081902090516326af533960e21b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__91639abd4ce4916119f191908690600401614bd4565b60806040518083038186803b158015611a0957600080fd5b505af4158015611a1d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a28919061408a565b611a58826000356001600160e01b03191633610ae7565b611a745760405162461bcd60e51b81526004016107d3906147ae565b6000828152600160205260409081902060090180546001600160a01b038481166001600160a01b031983161790925591519116907fa7f38588f02421aa73988ed359aee27363c896e7cc3b6e634e4357f7ee408e2590610985908590849086906145da565b60008181526001602081905260408220015482906001600160a01b0316331480611b155750611b15816000356001600160e01b03191633610ae7565b611b315760405162461bcd60e51b81526004016107d39061480b565b600083815260016020526040812090611b4985613219565b60058301546000908152600384016020526040902054600484015491925090158015611b73575081155b15611b855750600093506108e7915050565b600080611b9184611298565b91509150600080611ba185611298565b9150915084861415611c16578260028801600086601c811115611bc057fe5b601c811115611bcb57fe5b8152602081019190915260400160002055600487015460058801541415611bfd5750600097506108e795505050505050565b5050506005909301805460010190555092506108e79050565b801580611c2c57508215801590611c2c57508083105b80611c5057508083148015611c505750611c458261174e565b611c4e8561174e565b105b15611c93578260028801600086601c811115611c6857fe5b601c811115611c7357fe5b8152602081019190915260400160002055509396506108e7945050505050565b801580611ca7575060048701546005880154145b15611cbd5750600097506108e795505050505050565b50505060059093018054600101905593506108e7915050565b60026020526000908152604090205460ff1681565b6000828152600160205260408120610a28908363ffffffff6133bb16565b600082815260016020526040808220905163af08bc9560e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163af08bc95916109d891908690600401614bd4565b6000828152600160208190526040909120015482906001600160a01b0316331480611d8c5750611d8c816000356001600160e01b03191633610ae7565b611da85760405162461bcd60e51b81526004016107d39061480b565b5060009182526001602052604090912060060155565b6000838152600160208190526040909120015483906001600160a01b0316331480611dfb5750611dfb816000356001600160e01b03191633610ae7565b611e175760405162461bcd60e51b81526004016107d39061480b565b50604080518082018252600180825260208083019485526000968752818152838720958752600f90950190945293209251835460ff191690151517835551910155565b6000828152600160208190526040909120015482906001600160a01b0316331480611e975750611e97816000356001600160e01b03191633610ae7565b611eb35760405162461bcd60e51b81526004016107d39061480b565b600083815260016020526040908190209051630c41805d60e11b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9163188300ba91611efa91908690600401614be2565b60006040518083038186803b158015611f1257600080fd5b505af4158015611f26573d6000803e3d6000fd5b50506040518592507fb777acf68d226f3c8ab6f398cfb9a320e6fe8e92f5d2f0b4f69bc8ebab3b70cb9150600090a2505050565b60008160f884601c811115611f6b57fe5b60ff16901b179392505050565b611f806139ea565b50600090815260016020908152604091829020825160808101845260078201546001600160a01b03908116825260088301548116938201939093526009820154831693810193909352600a015416606082015290565b611fde612df3565b6000546001600160a01b0390811691161461200b5760405162461bcd60e51b81526004016107d39061499f565b6001600160a01b03166000908152600260205260409020805460ff19166001179055565b6000918252600160209081526040808420848052600c0182528084206001600160a01b0393909316845291905290205460ff1690565b6000828152600160205260408082209051636749043d60e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__91636749043d916120ab91908690600401614bd4565b60206040518083038186803b1580156120c357600080fd5b505af41580156120d7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a289190613bbe565b600082815260016020526040808220905162908ced60e01b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__9162908ced9161213f91908690600401614bd4565b60206040518083038186803b15801561215757600080fd5b505af415801561216b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2891906141d8565b60009081526001602052604090205461010090046001600160a01b031690565b6121b7612df3565b6000546001600160a01b039081169116146121e45760405162461bcd60e51b81526004016107d39061499f565b6001600160a01b03811661220a5760405162461bcd60e51b81526004016107d390614768565b600080546040516001600160a01b03808516939216917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e091a3600080546001600160a01b0319166001600160a01b0392909216919091179055565b60009081526001602052604090206006015490565b6122826137f2565b604080516102808101825272636f6e7472616374506572666f726d616e636560681b6000908152600e85016020529190912054819060f81c60058111156122c557fe5b60058111156122d057fe5b8152697374617475734461746560b01b6000908152600e8501602081815260408084205482860152706e6f6e506572666f726d696e674461746560781b845282825280842054818601526b6d617475726974794461746560a01b84528282528084205460608601526b65786572636973654461746560a01b84528282528084205460808601526e7465726d696e6174696f6e4461746560881b84528282528084205460a08601526c6c617374436f75706f6e44617960981b84528282528084205460c0860152701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b84528282528084205460e08601526e1858d8dc9d5959125b9d195c995cdd608a1b845282825280842054610100860152691999595058d8dc9d595960b21b845282825280842054610120860152726e6f6d696e616c496e7465726573745261746560681b8452828252808420546101408601527834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b845282825280842054610160860152783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b8452828252808420546101808601527f6e6578745072696e636970616c526564656d7074696f6e5061796d656e7400008452828252808420546101a08601526d195e195c98da5cd9505b5bdd5b9d60921b8452828252808420546101c08601526f65786572636973655175616e7469747960801b8452828252808420546101e0860152677175616e7469747960c01b8452828252808420546102008601527018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b8452828252808420546102208601526b36b0b933b4b72330b1ba37b960a11b8452828252808420546102408601526f30b2353ab9ba36b2b73a2330b1ba37b960811b8452919052902054610260909101529050919050565b61257a6137f2565b604080516102808101825274465f636f6e7472616374506572666f726d616e636560581b6000908152600e85016020529190912054819060f81c60058111156125bf57fe5b60058111156125ca57fe5b81526b465f7374617475734461746560a01b6000908152600e850160208181526040808420548286015272465f6e6f6e506572666f726d696e674461746560681b845282825280842054818601526d465f6d617475726974794461746560901b84528282528084205460608601526d465f65786572636973654461746560901b845282825280842054608086015270465f7465726d696e6174696f6e4461746560781b84528282528084205460a08601526e465f6c617374436f75706f6e44617960881b84528282528084205460c0860152721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b84528282528084205460e0860152701197d858d8dc9d5959125b9d195c995cdd607a1b8452828252808420546101008601526b1197d999595058d8dc9d595960a21b84528282528084205461012086015274465f6e6f6d696e616c496e7465726573745261746560581b8452828252808420546101408601527f465f696e7465726573745363616c696e674d756c7469706c69657200000000008452828252808420546101608601527f465f6e6f74696f6e616c5363616c696e674d756c7469706c69657200000000008452828252808420546101808601527f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e748452828252808420546101a08601526f1197d95e195c98da5cd9505b5bdd5b9d60821b8452828252808420546101c086015271465f65786572636973655175616e7469747960701b8452828252808420546101e086015269465f7175616e7469747960b01b845282825280842054610200860152721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b8452828252808420546102208601526d232fb6b0b933b4b72330b1ba37b960911b84528282528084205461024086015271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b8452919052902054610260909101529050919050565b606080826002016002015467ffffffffffffffff811180156128b557600080fd5b506040519080825280602002602001820160405280156128df578160200160208202803683370190505b50905060005b6004840154811015612923576000818152600385016020526040902054825183908390811061291057fe5b60209081029190910101526001016128e5565b5092915050565b6000908152600e91909101602052604090205490565b6000878152600160205260409020805460ff16156129705760405162461bcd60e51b81526004016107d39061485a565b6001600160a01b03831660009081526002602052604090205460ff1615156001146129ad5760405162461bcd60e51b81526004016107d390614956565b805485516007830180546001600160a01b03199081166001600160a01b039384161790915560208801516008850180548316918416919091179055604088015160098501805483169184169190911790556060880151600a85018054831691841691909117905560ff199092166001908117610100600160a81b0319166101008884160217845583018054909216908516179055612a4b8188612f23565b612a5b818863ffffffff612ac516565b612a6b818763ffffffff61346716565b6001600160a01b03821615612a8457612a8488836134d4565b7f5e73a3e4a3f69f1056f05ffd00ff11bf3835158ba0ebd5ad3b994065fcd8964688604051612ab391906145d1565b60405180910390a15050505050505050565b612afe8274465f636f6e7472616374506572666f726d616e636560581b60f884600001516005811115612af457fe5b60ff16901b61354b565b612b1f826b465f7374617475734461746560a01b836020015160001b61354b565b612b478272465f6e6f6e506572666f726d696e674461746560681b836040015160001b61354b565b612b6a826d465f6d617475726974794461746560901b836060015160001b61354b565b612b8d826d465f65786572636973654461746560901b836080015160001b61354b565b612bb38270465f7465726d696e6174696f6e4461746560781b8360a0015160001b61354b565b612bdb82721197db9bdd1a5bdb985b141c9a5b98da5c185b606a1b8360e0015160001b61354b565b612c0282701197d858d8dc9d5959125b9d195c995cdd607a1b83610100015160001b61354b565b612c24826b1197d999595058d8dc9d595960a21b83610120015160001b61354b565b612c4f8274465f6e6f6d696e616c496e7465726573745261746560581b83610140015160001b61354b565b612c82827f465f696e7465726573745363616c696e674d756c7469706c696572000000000083610160015160001b61354b565b612cb5827f465f6e6f74696f6e616c5363616c696e674d756c7469706c696572000000000083610180015160001b61354b565b612ce8827f465f6e6578745072696e636970616c526564656d7074696f6e5061796d656e74836101a0015160001b61354b565b612d0e826f1197d95e195c98da5cd9505b5bdd5b9d60821b836101c0015160001b61354b565b612d368271465f65786572636973655175616e7469747960701b836101e0015160001b61354b565b612d568269465f7175616e7469747960b01b83610200015160001b61354b565b612d7f82721197d8dbdd5c1bdb905b5bdd5b9d119a5e1959606a1b83610220015160001b61354b565b612da3826d232fb6b0b933b4b72330b1ba37b960911b83610240015160001b61354b565b612dcb8271232fb0b2353ab9ba36b2b73a2330b1ba37b960711b83610260015160001b61354b565b612def826e465f6c617374436f75706f6e44617960881b8360c0015160001b61354b565b5050565b3390565b6000808084602001516005811115612e0b57fe5b1415612e2b578351612e2490849063ffffffff61357d16565b9050610a28565b600184602001516005811115612e3d57fe5b1415612e59578351612e2490849060070263ffffffff61357d16565b600284602001516005811115612e6b57fe5b1415612e84578351612e2490849063ffffffff61359216565b600384602001516005811115612e9657fe5b1415612eb2578351612e2490849060030263ffffffff61359216565b600484602001516005811115612ec457fe5b1415612ee0578351612e2490849060060263ffffffff61359216565b600584602001516005811115612ef257fe5b1415612f0b578351612e2490849063ffffffff61360e16565b60405162461bcd60e51b81526004016107d3906149d4565b612f508272636f6e7472616374506572666f726d616e636560681b60f884600001516005811115612af457fe5b612f6f82697374617475734461746560b01b836020015160001b61354b565b612f9582706e6f6e506572666f726d696e674461746560781b836040015160001b61354b565b612fb6826b6d617475726974794461746560a01b836060015160001b61354b565b612fd7826b65786572636973654461746560a01b836080015160001b61354b565b612ffb826e7465726d696e6174696f6e4461746560881b8360a0015160001b61354b565b61302182701b9bdd1a5bdb985b141c9a5b98da5c185b607a1b8360e0015160001b61354b565b613046826e1858d8dc9d5959125b9d195c995cdd608a1b83610100015160001b61354b565b61306682691999595058d8dc9d595960b21b83610120015160001b61354b565b61308f82726e6f6d696e616c496e7465726573745261746560681b83610140015160001b61354b565b6130be827834b73a32b932b9ba29b1b0b634b733a6bab63a34b83634b2b960391b83610160015160001b61354b565b6130ed82783737ba34b7b730b629b1b0b634b733a6bab63a34b83634b2b960391b83610180015160001b61354b565b613120827f6e6578745072696e636970616c526564656d7074696f6e5061796d656e740000836101a0015160001b61354b565b613144826d195e195c98da5cd9505b5bdd5b9d60921b836101c0015160001b61354b565b61316a826f65786572636973655175616e7469747960801b836101e0015160001b61354b565b61318882677175616e7469747960c01b83610200015160001b61354b565b6131af827018dbdd5c1bdb905b5bdd5b9d119a5e1959607a1b83610220015160001b61354b565b6131d1826b36b0b933b4b72330b1ba37b960a11b83610240015160001b61354b565b6131f7826f30b2353ab9ba36b2b73a2330b1ba37b960811b83610260015160001b61354b565b612def826c6c617374436f75706f6e44617960981b8360c0015160001b61354b565b600081815260016020526040812061322f61388c565b60405163197bc8e960e21b815273__$42afaa163c16ede2bfb2fbb9ec69691405$__906365ef23a4906132669085906004016145d1565b6104e06040518083038186803b15801561327f57600080fd5b505af4158015613293573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132b79190613edb565b82549091506000908190819081906133639061010090046001600160a01b031663b90f73688760028a0185600381526020019081526020016000205460036040518463ffffffff1660e01b815260040161331393929190614df0565b60206040518083038186803b15801561332b57600080fd5b505afa15801561333f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104fc9190613c0e565b91509150826000148061337557508281105b8061339957508083148015613399575061338e8461174e565b6133978361174e565b105b156133a5578092508193505b50506133b18282611f5a565b9695505050505050565b600072636f6e7472616374506572666f726d616e636560681b82141561340c575072636f6e7472616374506572666f726d616e636560681b6000908152600e8301602052604090205460f81c610a2b565b74465f636f6e7472616374506572666f726d616e636560581b82141561345f575074465f636f6e7472616374506572666f726d616e636560581b6000908152600e8301602052604090205460f81c610a2b565b506000610a2b565b60005b81518110156134cf576000801b82828151811061348357fe5b60200260200101511415613496576134cf565b8181815181106134a257fe5b6020908102919091018101516000838152600386019092526040909120556001016004830181905561346a565b505050565b6000828152600160208181526040808420848052600c0182528084206001600160a01b0386168086529252808420805460ff19169093179092559051909184917face25d271ad11ee299595b3021629bae0349e370d7c2eb7c2dced6e4edb478659161353f91614681565b60405180910390a35050565b6000828152600e84016020526040902054811415613568576134cf565b6000918252600e929092016020526040902055565b620151808102820182811015610a2b57600080fd5b60008080806135a662015180875b04613635565b600c9188016000198101838104949094019650945092509006600101915060006135d084846136cb565b9050808211156135de578091505b620151808706620151806135f3868686613751565b020194508685101561360457600080fd5b5050505092915050565b600080808061362062015180876135a0565b91870194509250905060006135d084846136cb565b60008080836226496581018262023ab1600483020590506004600362023ab18302010590910390600062164b09610fa0600185010205905060046105b58202058303601f019250600061098f846050028161368c57fe5b0590506000605061098f83020585039050600b820560301994909401606402929092018301996002600c90940290910392909201975095509350505050565b600081600114806136dc5750816003145b806136e75750816005145b806136f25750816007145b806136fd5750816008145b80613708575081600a145b80613713575081600c145b156137205750601f610a2b565b816002146137305750601e610a2b565b613739836137cd565b61374457601c613747565b601d5b60ff169392505050565b60006107b284101561376257600080fd5b838383600062253d8c600460036064611324600c600d19890105890101050205600c80600d19870105600c02600287030361016f028161379e57fe5b0560046105b5600c600d1989010589016112c0010205617d4b8603010103039050809450505050509392505050565b6000600482061580156137e257506064820615155b8061086e57505061019090061590565b6040805161028081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b60408051610340810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200161394661397f565b815260200161395361397f565b81526020016139606139c9565b815260200161396d6139a2565b815260200161397a6139a2565b905290565b6040805160608101909152600080825260208201905b8152600060209091015290565b6040805160808101825260008082526020820181905290918201908152602001600061397a565b60408051608081019091526000808252602082019081526020016000613995565b60408051608081018252600080825260208201819052918101829052606081019190915290565b8035610a2b81614fc6565b8051610a2b81614fc6565b8051610a2b81614fe9565b8051610a2b81614ff6565b8035610a2b81615003565b8051610a2b81615003565b8051610a2b8161501d565b8035610a2b8161502a565b8051610a2b8161502a565b6000608082840312156108e7578081fd5b60006104e082840312156108e7578081fd5b600060808284031215613aa8578081fd5b613ab26080614f3c565b905081518152602082015160208201526040820151613ad081615010565b60408201526060820151613ae381615010565b606082015292915050565b600060808284031215613aff578081fd5b613b096080614f3c565b9050815181526020820151613b1d81615003565b60208201526040820151613b3081614ff6565b60408201526060820151613ae381614fdb565b600060608284031215613b54578081fd5b613b5e6060614f3c565b9050815181526020820151613b7281615003565b60208201526040820151613b8581614fdb565b604082015292915050565b600061028082840312156108e7578081fd5b600060208284031215613bb3578081fd5b8135610a2881614fc6565b600060208284031215613bcf578081fd5b8151610a2881614fc6565b600060208284031215613beb578081fd5b8151610a2881614fdb565b600060208284031215613c07578081fd5b5035919050565b600060208284031215613c1f578081fd5b5051919050565b60008060408385031215613c38578081fd5b823591506020830135613c4a81614fc6565b809150509250929050565b60008060408385031215613c67578182fd5b50508035926020909101359150565b600080600060608486031215613c8a578081fd5b505081359360208301359350604090920135919050565b600080600060608486031215613cb5578081fd5b8335925060208401356001600160e01b031981168114613cd3578182fd5b91506040840135613ce381614fc6565b809150509250925092565b6000806105008385031215613d01578182fd5b82359150613d128460208501613a85565b90509250929050565b60008060008060008060008060006108808a8c031215613d39578687fd5b89359850613d4a8b60208c01613a85565b9750613d5a8b6105008c01613b90565b96506107808a013567ffffffffffffffff80821115613d77578687fd5b818c018d601f820112613d88578788fd5b8035925081831115613d98578788fd5b8d60208085028301011115613dab578788fd5b6020019750909550613dc390508b6107a08c01613a74565b9350613dd38b6108208c01613a11565b9250613de38b6108408c01613a11565b9150613df38b6108608c01613a11565b90509295985092959850929598565b6000806102a08385031215613e15578182fd5b82359150613d128460208501613b90565b600060208284031215613e37578081fd5b8135601d8110610a28578182fd5b60008060408385031215613e57578182fd5b8235601d8110613e65578283fd5b946020939093013593505050565b600060808284031215613e84578081fd5b613e8e6080614f3c565b8235613e9981614fc6565b81526020830135613ea981614fc6565b60208201526040830135613ebc81614fc6565b60408201526060830135613ecf81614fc6565b60608201529392505050565b60006104e08284031215613eed578081fd5b613ef8610340614f3c565b613f028484613a69565b8152613f118460208501613a32565b6020820152613f238460408501613a53565b6040820152613f358460608501613a48565b6060820152613f478460808501613a27565b6080820152613f598460a08501613a32565b60a0820152613f6b8460c08501613a32565b60c0820152613f7d8460e08501613a48565b60e0820152610100613f9185828601613a1c565b90820152610120613fa485858301613a1c565b908201526101408381015190820152610160808401519082015261018080840151908201526101a080840151908201526101c080840151908201526101e08084015190820152610200808401519082015261022080840151908201526102408084015190820152610260808401519082015261028080840151908201526102a061403085828601613b43565b9082015261030061404385858301613b43565b6102c0830152614057856103608601613aee565b6102e083015261406b856103e08601613a97565b9082015261407d846104608501613a97565b6103208201529392505050565b60006080828403121561409b578081fd5b610a288383613a97565b6000608082840312156140b6578081fd5b610a288383613aee565b6000606082840312156140d1578081fd5b610a288383613b43565b60006102808083850312156140ee578182fd5b6140f781614f3c565b6141018585613a3d565b81526020848101359082015260408085013590820152606080850135908201526080808501359082015260a0808501359082015260c0808501359082015260e08085013590820152610100808501359082015261012080850135908201526101408085013590820152610160808501359082015261018080850135908201526101a080850135908201526101c080850135908201526101e080850135908201526102008085013590820152610220808501359082015261024080850135908201526102609384013593810193909352509092915050565b6000602082840312156141e9578081fd5b815160ff81168114610a28578182fd5b6001600160a01b03169052565b6009811061421057fe5b9052565b61421081614faf565b61421081614fbc565b600d811061421057fe5b6013811061421057fe5b614245828251614230565b60208101516142576020840182614214565b50604081015161426a6040840182614226565b50606081015161427d606084018261421d565b5060808101516142906080840182614206565b5060a08101516142a360a0840182614214565b5060c08101516142b660c0840182614214565b5060e08101516142c960e084018261421d565b50610100808201516142dd828501826141f9565b5050610120808201516142f2828501826141f9565b50506101408181015190830152610160808201519083015261018080820151908301526101a080820151908301526101c080820151908301526101e08082015190830152610200808201519083015261022080820151908301526102408082015190830152610260808201519083015261028080820151908301526102a08082015161438082850182614520565b50506102c081015161030061439781850183614520565b6102e083015191506143ad6103608501836144ae565b82015190506143c06103e0840182614421565b506103208101516134cf610460840182614421565b803582526020810135602083015260408101356143f181615010565b6143fa81614fa4565b604084015250606081013561440e81615010565b61441781614fa4565b6060840152505050565b805182526020810151602083015261443c6040820151614fa4565b604083015261444e6060820151614fa4565b60608301525050565b80358252602081013561446981615003565b61447281614fbc565b6020830152604081013561448581614ff6565b61448e81614faf565b604083015260608101356144a181614fdb565b8015156060840152505050565b8051825260208101516144c081614fbc565b602083015260408101516144d381614faf565b60408301526060908101511515910152565b8035825260208101356144f781615003565b61450081614fbc565b6020830152604081013561451381614fdb565b8015156040840152505050565b80518252602081015161453281614fbc565b60208301526040908101511515910152565b6001600160a01b0391909116815260200190565b6001600160a01b0392831681529116602082015260400190565b6020808252825182820181905260009190848201906040850190845b818110156145aa5783518352928401929184019160010161458e565b50909695505050505050565b901515815260200190565b9115158252602082015260400190565b90815260200190565b9283526001600160a01b03918216602084015216604082015260600190565b9081526a19dc9858d954195c9a5bd960aa1b602082015260400190565b9081527019195b1a5b9c5d595b98de54195c9a5bd9607a1b602082015260400190565b908152706e6f6e506572666f726d696e674461746560781b602082015260400190565b90815272636f6e7472616374506572666f726d616e636560681b602082015260400190565b6001600160e01b031991909116815260200190565b60408101601d84106146a457fe5b9281526020015290565b6020808252603e908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20454e5452595f444f45535f4e4f545f45584953540000606082015260800190565b6020808252603d908201527f417373657452656769737472792e736574436f756e746572706172747942656e60408201527f65666963696172793a20554e415554484f52495a45445f53454e444552000000606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526039908201527f417373657452656769737472792e736574436f756e74657270617274794f626c60408201527f69676f723a20554e415554484f52495a45445f53454e44455200000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e6973417574686f72697a65643a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b6020808252602b908201527f4261736552656769737472792e73657441737365743a2041535345545f414c5260408201526a454144595f45584953545360a81b606082015260800190565b60208082526034908201527f4261736552656769737472792e6f6e6c79417070726f7665644163746f72733a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526038908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20554e415554484f52495a45445f53454e4445520000000000000000606082015260800190565b60208082526029908201527f4261736552656769737472792e73657441737365743a204143544f525f4e4f5460408201526817d054141493d5915160ba1b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526037908201527f506572696f645574696c732e67657454696d657374616d70506c75735065726960408201527f6f643a204154545249425554455f4e4f545f464f554e44000000000000000000606082015260800190565b60208082526039908201527f417373657452656769737472792e73657443726561746f7242656e656669636960408201527f6172793a20454e5452595f444f45535f4e4f545f455849535400000000000000606082015260800190565b6020808252602f908201527f416363657373436f6e74726f6c2e7265766f6b654163636573733a20554e415560408201526e2a2427a924ad22a22fa9a2a72222a960891b606082015260800190565b60208082526034908201527f417373657452656769737472792e73657443726561746f724f626c69676f723a604082015273102aa720aaaa2427a924ad22a22fa9a2a72222a960611b606082015260800190565b60208082526042908201527f41737365744163746f722e6765744e657874556e6465726c79696e674576656e60408201527f743a20554e4445524c59494e475f41535345545f444f45535f4e4f545f45584960608201526114d560f21b608082015260a00190565b81516001600160a01b039081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b918252602082015260400190565b8281526105008101602083810190614c05908401614c008387613a5e565b614230565b614c0f8185614f7d565b614c1c6040850182614214565b5050614c2b6040840184614f97565b614c386060840182614226565b50614c466060840184614f8a565b614c53608084018261421d565b50614c616080840184614f70565b614c6e60a0840182614206565b50614c7c60a0840184614f7d565b614c8960c0840182614214565b50614c9760c0840184614f7d565b614ca460e0840182614214565b50614cb260e0840184614f8a565b610100614cc18185018361421d565b614ccd81860186614f63565b915050610120614cdf818501836141f9565b614ceb81860186614f63565b915050610140614cfd818501836141f9565b610160915080850135828501525061018081850135818501526101a091508085013582850152506101c081850135818501526101e09150808501358285015250610200818501358185015261022091508085013582850152506102408185013581850152610260915080850135828501525061028081850135818501526102a09150808501358285015250614d986102c084018286016144e5565b50614dab610320830161030085016144e5565b614dbd61038083016103608501614457565b614dcf61040083016103e085016143d5565b610b5d610480830161046085016143d5565b6104e08101610a2b828461423a565b6105208101614dff828661423a565b836104e0830152601d8310614e1057fe5b82610500830152949350505050565b60808101610a2b8284614421565b60808101610a2b82846144ae565b60608101610a2b8284614520565b600061028082019050614e5d82845161421d565b6020838101519083015260408084015190830152606080840151908301526080808401519083015260a0808401519083015260c0808401519083015260e08084015190830152610100808401519083015261012080840151908301526101408084015190830152610160808401519083015261018080840151908301526101a080840151908301526101c080840151908301526101e0808401519083015261020080840151908301526102208084015190830152610240808401519083015261026092830151929091019190915290565b60ff91909116815260200190565b60405181810167ffffffffffffffff81118282101715614f5b57600080fd5b604052919050565b60008235610a2881614fc6565b60008235610a2881614fe9565b60008235610a2881614ff6565b60008235610a2881615003565b60008235610a288161501d565b806005811061087157fe5b60028110614fb957fe5b50565b60068110614fb957fe5b6001600160a01b0381168114614fb957600080fd5b8015158114614fb957600080fd5b60098110614fb957600080fd5b60028110614fb957600080fd5b60068110614fb957600080fd5b60058110614fb957600080fd5b600d8110614fb957600080fd5b60138110614fb957600080fdfea2646970667358221220624a1a0796a4821e65cd4868bc3724f1a8266de638eda9266b257bdbf8f1c28064736f6c634300060b0033",
  "linkReferences": {
    "contracts/Core/CEG/CEGEncoder.sol": {
      "CEGEncoder": [
        {
          "length": 20,
          "start": 2618
        },
        {
          "length": 20,
          "start": 4157
        },
        {
          "length": 20,
          "start": 4493
        },
        {
          "length": 20,
          "start": 4651
        },
        {
          "length": 20,
          "start": 6226
        },
        {
          "length": 20,
          "start": 6407
        },
        {
          "length": 20,
          "start": 6739
        },
        {
          "length": 20,
          "start": 7601
        },
        {
          "length": 20,
          "start": 8028
        },
        {
          "length": 20,
          "start": 8461
        },
        {
          "length": 20,
          "start": 8610
        },
        {
          "length": 20,
          "start": 13001
        }
      ]
    }
  },
  "deployedLinkReferences": {
    "contracts/Core/CEG/CEGEncoder.sol": {
      "CEGEncoder": [
        {
          "length": 20,
          "start": 2479
        },
        {
          "length": 20,
          "start": 4018
        },
        {
          "length": 20,
          "start": 4354
        },
        {
          "length": 20,
          "start": 4512
        },
        {
          "length": 20,
          "start": 6087
        },
        {
          "length": 20,
          "start": 6268
        },
        {
          "length": 20,
          "start": 6600
        },
        {
          "length": 20,
          "start": 7462
        },
        {
          "length": 20,
          "start": 7889
        },
        {
          "length": 20,
          "start": 8322
        },
        {
          "length": 20,
          "start": 8471
        },
        {
          "length": 20,
          "start": 12862
        }
      ]
    }
  }
}
