{
  "_format": "hh-sol-artifact-1",
  "contractName": "Filplus",
  "sourceName": "src/v0.8/core/filplus/Filplus.sol",
  "abi": [
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "address",
          "name": "previousAdmin",
          "type": "address"
        },
        {
          "indexed": false,
          "internalType": "address",
          "name": "newAdmin",
          "type": "address"
        }
      ],
      "name": "AdminChanged",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "beacon",
          "type": "address"
        }
      ],
      "name": "BeaconUpgraded",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "version",
          "type": "uint8"
        }
      ],
      "name": "Initialized",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_newValue",
          "type": "uint64"
        }
      ],
      "name": "SetDatacapRulesMaxAllocatedSizePerTime",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint64",
          "name": "_newValue",
          "type": "uint64"
        }
      ],
      "name": "SetDatacapRulesMaxRemainingPercentageForNext",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleDefaultMaxReplicasPerCountry",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint8",
          "name": "_newValue",
          "type": "uint8"
        }
      ],
      "name": "SetDatasetRuleMaxProportionOfMappingFilesToDataset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_countryCode",
          "type": "uint16"
        },
        {
          "indexed": false,
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "SetDatasetRuleMaxReplicasInCountry",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleMaxReplicasPerCity",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleMaxReplicasPerSP",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleMaxTotalReplicasPerDataset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleMinRegionsPerDataset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleMinSPsPerDataset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": false,
          "internalType": "uint32",
          "name": "_newValue",
          "type": "uint32"
        }
      ],
      "name": "SetDatasetRuleMinTotalReplicasPerDataset",
      "type": "event"
    },
    {
      "anonymous": false,
      "inputs": [
        {
          "indexed": true,
          "internalType": "address",
          "name": "implementation",
          "type": "address"
        }
      ],
      "name": "Upgraded",
      "type": "event"
    },
    {
      "inputs": [],
      "name": "GOVERNANCE_ADDRESS",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datacapRulesMaxAllocatedSizePerTime",
      "outputs": [
        {
          "internalType": "uint64",
          "name": "",
          "type": "uint64"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datacapRulesMaxRemainingPercentageForNext",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleDefaultMaxReplicasPerCountry",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMaxProportionOfMappingFilesToDataset",
      "outputs": [
        {
          "internalType": "uint8",
          "name": "",
          "type": "uint8"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMaxReplicasPerCity",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMaxReplicasPerSP",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMaxTotalReplicasPerDataset",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMinRegionsPerDataset",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMinSPsPerDataset",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "datasetRuleMinTotalReplicasPerDataset",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_countryCode",
          "type": "uint16"
        }
      ],
      "name": "getDatasetRuleMaxReplicasInCountry",
      "outputs": [
        {
          "internalType": "uint16",
          "name": "",
          "type": "uint16"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "getImplementation",
      "outputs": [
        {
          "internalType": "address",
          "name": "",
          "type": "address"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address payable",
          "name": "_governanceAddress",
          "type": "address"
        },
        {
          "internalType": "address",
          "name": "_roles",
          "type": "address"
        }
      ],
      "name": "initialize",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16[]",
          "name": "_regions",
          "type": "uint16[]"
        },
        {
          "internalType": "uint16[]",
          "name": "_countrys",
          "type": "uint16[]"
        },
        {
          "internalType": "uint32[][]",
          "name": "_citys",
          "type": "uint32[][]"
        }
      ],
      "name": "isCompliantRuleGeolocation",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_mappingFilesSize",
          "type": "uint64"
        },
        {
          "internalType": "uint64",
          "name": "_sourceSize",
          "type": "uint64"
        }
      ],
      "name": "isCompliantRuleMaxProportionOfMappingFilesToDataset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_value",
          "type": "uint16"
        }
      ],
      "name": "isCompliantRuleMaxReplicasPerSP",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_requirementValue",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_totalExists",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_uniqueExists",
          "type": "uint16"
        }
      ],
      "name": "isCompliantRuleMinSPsPerDataset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address[][]",
          "name": "_dataPreparers",
          "type": "address[][]"
        },
        {
          "internalType": "address[][]",
          "name": "_storageProviders",
          "type": "address[][]"
        },
        {
          "internalType": "uint16[]",
          "name": "_regions",
          "type": "uint16[]"
        },
        {
          "internalType": "uint16[]",
          "name": "_countrys",
          "type": "uint16[]"
        },
        {
          "internalType": "uint32[][]",
          "name": "_citys",
          "type": "uint32[][]"
        }
      ],
      "name": "isCompliantRuleTotalReplicasPerDataset",
      "outputs": [
        {
          "internalType": "bool",
          "name": "",
          "type": "bool"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [],
      "name": "proxiableUUID",
      "outputs": [
        {
          "internalType": "bytes32",
          "name": "",
          "type": "bytes32"
        }
      ],
      "stateMutability": "view",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint64",
          "name": "_newValue",
          "type": "uint64"
        }
      ],
      "name": "setDatacapRulesMaxAllocatedSizePerTime",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_newValue",
          "type": "uint8"
        }
      ],
      "name": "setDatacapRulesMaxRemainingPercentageForNext",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleDefaultMaxReplicasPerCountry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint8",
          "name": "_newValue",
          "type": "uint8"
        }
      ],
      "name": "setDatasetRuleMaxProportionOfMappingFilesToDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_countryCode",
          "type": "uint16"
        },
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMaxReplicasInCountry",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMaxReplicasPerCity",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMaxReplicasPerSP",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMaxTotalReplicasPerDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMinRegionsPerDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMinSPsPerDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "uint16",
          "name": "_newValue",
          "type": "uint16"
        }
      ],
      "name": "setDatasetRuleMinTotalReplicasPerDataset",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        }
      ],
      "name": "upgradeTo",
      "outputs": [],
      "stateMutability": "nonpayable",
      "type": "function"
    },
    {
      "inputs": [
        {
          "internalType": "address",
          "name": "newImplementation",
          "type": "address"
        },
        {
          "internalType": "bytes",
          "name": "data",
          "type": "bytes"
        }
      ],
      "name": "upgradeToAndCall",
      "outputs": [],
      "stateMutability": "payable",
      "type": "function"
    }
  ],
  "bytecode": "0x60a06040523060805234801561001457600080fd5b50608051612dca61004c60003960008181610768015281816107a801528181610976015281816109b60152610af40152612dca6000f3fe60806040526004361061017e5760003560e01c80630143dd8614610183578063037864d2146101b95780630d73ce49146101e657806310f247591461021557806322ba9eb91461023757806322eede81146102595780632e6e21811461027b5780633659cfe61461029b578063388ee1e4146102bb578063441e5cda146102e9578063485cc955146103095780634f1ef2861461032957806350cc591f1461033c578063526cb8bf1461035c57806352d1902d1461037c57806353160a631461039e578063591abc51146103c05780635ac47b27146103e05780636f52df711461040057806384cbe2ee146104205780638e2f7e07146104425780639017e5da146104625780639ba6cf3d146104825780639eaa0818146104a2578063a155c939146104c2578063a54bfaf3146104dd578063a8bbce4a146104fd578063aaf10f421461051f578063b333af1414610534578063b363e1f514610554578063b77af5b914610574578063e502523c14610594578063f4e5f7bd146105b4575b600080fd5b34801561018f57600080fd5b506066546101a3906001600160a01b031681565b6040516101b09190611e43565b60405180910390f35b3480156101c557600080fd5b506101d96101d4366004611e6d565b6105e8565b6040516101b09190611e96565b3480156101f257600080fd5b5060665461020890600160b01b900461ffff1681565b6040516101b09190611eae565b34801561022157600080fd5b5060685461020890600160281b900461ffff1681565b34801561024357600080fd5b50610257610252366004611ebc565b610614565b005b34801561026557600080fd5b5060685461020890600160481b900461ffff1681565b34801561028757600080fd5b50610257610296366004611f19565b6106d3565b3480156102a757600080fd5b506102576102b6366004611f4e565b61075e565b3480156102c757600080fd5b506068546102dc90600160981b900460ff1681565b6040516101b09190611f78565b3480156102f557600080fd5b506068546102dc9062010000900460ff1681565b34801561031557600080fd5b50610257610324366004611f86565b610826565b6102576103373660046120b1565b61096c565b34801561034857600080fd5b506101d96103573660046122bd565b610a25565b34801561036857600080fd5b50610257610377366004611e6d565b610a72565b34801561038857600080fd5b50610391610ae7565b6040516101b09190612360565b3480156103aa57600080fd5b5060665461020890600160a01b900461ffff1681565b3480156103cc57600080fd5b506102576103db366004611e6d565b610b44565b3480156103ec57600080fd5b506102576103fb366004611e6d565b610bb9565b34801561040c57600080fd5b506101d961041b366004612474565b610c2e565b34801561042c57600080fd5b50606854610208906301000000900461ffff1681565b34801561044e57600080fd5b5061025761045d366004611e6d565b610cc8565b34801561046e57600080fd5b5061025761047d366004612581565b610d3d565b34801561048e57600080fd5b5061025761049d366004611e6d565b610db0565b3480156104ae57600080fd5b506101d96104bd3660046125a2565b610e1c565b3480156104ce57600080fd5b506068546102089061ffff1681565b3480156104e957600080fd5b506102576104f8366004612581565b610e6b565b34801561050957600080fd5b5060685461020890600160381b900461ffff1681565b34801561052b57600080fd5b506101a3610edc565b34801561054057600080fd5b506101d961054f3660046125d5565b610eeb565b34801561056057600080fd5b5061025761056f366004611e6d565b610f78565b34801561058057600080fd5b5061025761058f366004611e6d565b610fed565b3480156105a057600080fd5b506102086105af366004611e6d565b611062565b3480156105c057600080fd5b506068546105db90600160581b90046001600160401b031681565b6040516101b09190612624565b60685460009061ffff600160281b9091048116908316111561060c57506000919050565b506001919050565b6066546001600160a01b03163381146106485760405162461bcd60e51b815260040161063f90612669565b60405180910390fd5b61ffff8216600081900361066e5760405162461bcd60e51b815260040161063f906126a6565b61ffff84811660009081526067602052604090819020805461ffff191692861692909217909155517f8ab4eba2d4f9e3a97284cfd4fe6c8fa42683ddf246884a2a5dd80f71155b9b6a906106c590869086906126b6565b60405180910390a150505050565b6066546001600160a01b03163381146106fe5760405162461bcd60e51b815260040161063f90612669565b60688054600160581b600160981b031916600160581b6001600160401b038516021790556040517f1638393c4a55a697b67b203f5a98cad8e01692bcd3120d675a50db08cfb8bf8590610752908490612624565b60405180910390a15050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107a65760405162461bcd60e51b815260040161063f9061270b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107d86110b2565b6001600160a01b0316146107fe5760405162461bcd60e51b815260040161063f90612752565b610807816110ce565b6040805160008082526020820190925261082391839190611162565b50565b600054610100900460ff16158080156108465750600054600160ff909116105b80610867575061085530611244565b158015610867575060005460ff166001145b6108835760405162461bcd60e51b815260040161063f906127ad565b6000805460ff1916600117905580156108a6576000805461ff0019166101001790555b606580546001600160a01b03199081166001600160a01b038581169190911790925560668054600160b01b9387166001600160b01b031990911617600360a01b1761ffff60b01b19169290921790915560688054909116690a000500010005280001630a00001960811b0117905561091c611253565b8015610967576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061095e906001906127d1565b60405180910390a15b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109b45760405162461bcd60e51b815260040161063f9061270b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109e66110b2565b6001600160a01b031614610a0c5760405162461bcd60e51b815260040161063f90612752565b610a15826110ce565b610a2182826001611162565b5050565b6000610a308461127c565b610a3c57506000610a6b565b610a4683836112b2565b610a5257506000610a6b565b610a5b82611402565b610a6757506000610a6b565b5060015b9392505050565b6066546001600160a01b0316338114610a9d5760405162461bcd60e51b815260040161063f90612669565b6068805461ffff60481b1916600160481b61ffff8516021790556040517ff3e1e0209d38dd56f8504bdc185d9ce72a34fa9d5b6e808065560ec6084c7c6e906107529084906127f4565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b315760405162461bcd60e51b815260040161063f90612857565b50600080516020612d4e83398151915290565b6066546001600160a01b0316338114610b6f5760405162461bcd60e51b815260040161063f90612669565b6068805461ffff60381b1916600160381b61ffff8516021790556040517f989560ddf0d69e0698028d5a7c597da8f58582a5313f17ddef330466673014e5906107529084906127f4565b6066546001600160a01b0316338114610be45760405162461bcd60e51b815260040161063f90612669565b6068805461ffff60281b1916600160281b61ffff8516021790556040517f7cd9f9c39b6ef5f9be70105d3d19deae176dba103dd39f60aa9618191b254c7e906107529084906127f4565b600085518451141580610c4357508451845114155b80610c5057508251845114155b80610c5d57508151845114155b15610c6a57506000610cbf565b6068548451600160481b90910461ffff161080610c9557506068548451600160381b90910461ffff16115b80610cae57506068548451630100000090910461ffff16115b15610cbb57506000610cbf565b5060015b95945050505050565b6066546001600160a01b0316338114610cf35760405162461bcd60e51b815260040161063f90612669565b6066805461ffff60b01b1916600160b01b61ffff8516021790556040517f3dbf7a2575028a05ffc2141b7b21a5ff5bf242f97ffc79f0691636b590c40b5b906107529084906127f4565b6066546001600160a01b0316338114610d685760405162461bcd60e51b815260040161063f90612669565b6068805460ff60981b1916600160981b60ff8516021790556040517f0aa0c61a91b651e8b70878d66dacee7f4f914728325a7f3a60320bfc8c4ac14b9061075290849061287e565b6066546001600160a01b0316338114610ddb5760405162461bcd60e51b815260040161063f90612669565b6068805461ffff191661ffff84161790556040517f7ffa68e54076df69500ebc7d9f525705d16b0b94ee599bfb4a84671f05ed469a906107529084906127f4565b60008082610e2c856127106128a2565b610e3691906128f4565b60685490915062010000900460ff166001600160401b0382161115610e5f576000915050610e65565b60019150505b92915050565b6066546001600160a01b0316338114610e965760405162461bcd60e51b815260040161063f90612669565b6068805462ff000019166201000060ff8516021790556040517fe966ef613df3398310b903faa1cda91b74c995736186944a358f9a28192638e890610752908490611f78565b6000610ee66110b2565b905090565b60685460009061ffff6301000000909104811690831610610f0e57506001610a6b565b8361ffff168261ffff16101580610f2d57508361ffff168361ffff1610155b15610f3a57506000610a6b565b6068546301000000900461ffff1682610f53858761291e565b610f5d919061293c565b61ffff1610610f6e57506001610a6b565b5060009392505050565b6066546001600160a01b0316338114610fa35760405162461bcd60e51b815260040161063f90612669565b6066805461ffff60a01b1916600160a01b61ffff8516021790556040517fade71b85c95015240c5fe8cb16620452565116b622a9f86e1bbd7cff817d0078906107529084906127f4565b6066546001600160a01b03163381146110185760405162461bcd60e51b815260040161063f90612669565b6068805464ffff0000001916630100000061ffff8516021790556040517f7d1d04ce8d3c095f3441cdafa66195f2468f0d1cd868bf891ac9c1b1e623607d906107529084906127f4565b61ffff8082166000908152606760205260408120549091168103611093575050606654600160b01b900461ffff1690565b5061ffff9081166000908152606760205260409020541690565b919050565b600080516020612d4e833981519152546001600160a01b031690565b606554604051632474521560e21b81526001600160a01b039091169060009082906391d1485490611105908490339060040161295a565b602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111469190612988565b6109675760405162461bcd60e51b815260040161063f906129da565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611195576109678361161a565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111ef575060408051601f3d908101601f191682019092526111ec918101906129fb565b60015b61120b5760405162461bcd60e51b815260040161063f90612a67565b600080516020612d4e83398151915281146112385760405162461bcd60e51b815260040161063f90612abd565b5061096783838361166e565b6001600160a01b03163b151590565b600054610100900460ff1661127a5760405162461bcd60e51b815260040161063f90612b15565b565b60008061128883611699565b606654909150600160a01b900461ffff168110156112a95750600092915050565b50600192915050565b60008060006112c0856117cc565b9150915060005b82811015610cbb5760006112fd8383815181106112e6576112e6612b25565b6020026020010151886119a490919063ffffffff16565b905060018111156113b55760005b87518163ffffffff1610156113b357878163ffffffff168151811061133257611332612b25565b602002602001015161ffff1684848151811061135057611350612b25565b602002602001015161ffff16036113a1576000878263ffffffff168151811061137b5761137b612b25565b602002602001015151116113a15760405162461bcd60e51b815260040161063f90612b62565b806113ab81612b72565b91505061130b565b505b6113d78383815181106113ca576113ca612b25565b6020026020010151611062565b61ffff168111156113ef576000945050505050610e65565b50806113fa81612b95565b9150506112c7565b600080805b83518110156114895761143284828151811061142557611425612b25565b6020026020010151611a02565b1561144f5760405162461bcd60e51b815260040161063f90612bd5565b83818151811061146157611461612b25565b602002602001015151826114759190612be5565b91508061148181612b95565b915050611407565b506000816001600160401b038111156114a4576114a4611fc3565b6040519080825280602002602001820160405280156114cd578160200160208202803683370190505b5090506000805b855181101561158f5760005b8682815181106114f2576114f2612b25565b60200260200101515181101561157c5786828151811061151457611514612b25565b6020026020010151818151811061152d5761152d612b25565b602002602001015184848151811061154757611547612b25565b63ffffffff909216602092830291909101909101528261156681612b95565b935050808061157490612b95565b9150506114e0565b508061158781612b95565b9150506114d4565b5060008061159c84611aa5565b9150915060005b8281101561160c5760006115d98383815181106115c2576115c2612b25565b602002602001015187611c7890919063ffffffff16565b60685490915061ffff168111156115f95750600098975050505050505050565b508061160481612b95565b9150506115a3565b506001979650505050505050565b61162381611244565b61163f5760405162461bcd60e51b815260040161063f90612c42565b600080516020612d4e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61167783611cd2565b6000825111806116845750805b15610967576116938383611d12565b50505050565b60008060009050600083516001600160401b038111156116bb576116bb611fc3565b6040519080825280602002602001820160405280156116e4578160200160208202803683370190505b50905060005b84518110156117c357600160005b8481101561175c5783818151811061171257611712612b25565b602002602001015161ffff1687848151811061173057611730612b25565b602002602001015161ffff160361174a576000915061175c565b8061175481612b95565b9150506116f8565b5080156117b05785828151811061177557611775612b25565b602002602001015183858151811061178f5761178f612b25565b61ffff90921660209283029190910190910152836117ac81612b95565b9450505b50806117bb81612b95565b9150506116ea565b50909392505050565b6000606060008084516001600160401b038111156117ec576117ec611fc3565b604051908082528060200260200182016040528015611815578160200160208202803683370190505b50905060005b85518110156118f457600160005b8481101561188d5783818151811061184357611843612b25565b602002602001015161ffff1688848151811061186157611861612b25565b602002602001015161ffff160361187b576000915061188d565b8061188581612b95565b915050611829565b5080156118e1578682815181106118a6576118a6612b25565b60200260200101518385815181106118c0576118c0612b25565b61ffff90921660209283029190910190910152836118dd81612b95565b9450505b50806118ec81612b95565b91505061181b565b506000826001600160401b0381111561190f5761190f611fc3565b604051908082528060200260200182016040528015611938578160200160208202803683370190505b50905060005b838110156119975782818151811061195857611958612b25565b602002602001015182828151811061197257611972612b25565b61ffff909216602092830291909101909101528061198f81612b95565b91505061193e565b5091959194509092505050565b600080805b84518110156119fa578361ffff168582815181106119c9576119c9612b25565b602002602001015161ffff16036119e857816119e481612b95565b9250505b806119f281612b95565b9150506119a9565b509392505050565b6000805b8251811015611a9c576000611a1c826001612be5565b90505b8351811015611a8957838181518110611a3a57611a3a612b25565b602002602001015163ffffffff16848381518110611a5a57611a5a612b25565b602002602001015163ffffffff1603611a77575060019392505050565b80611a8181612b95565b915050611a1f565b5080611a9481612b95565b915050611a06565b50600092915050565b6000606060008084516001600160401b03811115611ac557611ac5611fc3565b604051908082528060200260200182016040528015611aee578160200160208202803683370190505b50905060005b8551811015611bd357600160005b84811015611b6a57838181518110611b1c57611b1c612b25565b602002602001015163ffffffff16888481518110611b3c57611b3c612b25565b602002602001015163ffffffff1603611b585760009150611b6a565b80611b6281612b95565b915050611b02565b508015611bc057868281518110611b8357611b83612b25565b6020026020010151838581518110611b9d57611b9d612b25565b63ffffffff9092166020928302919091019091015283611bbc81612b95565b9450505b5080611bcb81612b95565b915050611af4565b506000826001600160401b03811115611bee57611bee611fc3565b604051908082528060200260200182016040528015611c17578160200160208202803683370190505b50905060005b8381101561199757828181518110611c3757611c37612b25565b6020026020010151828281518110611c5157611c51612b25565b63ffffffff9092166020928302919091019091015280611c7081612b95565b915050611c1d565b600080805b84518110156119fa578363ffffffff16858281518110611c9f57611c9f612b25565b602002602001015163ffffffff1603611cc05781611cbc81612b95565b9250505b80611cca81612b95565b915050611c7d565b611cdb8161161a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610a6b8383604051806060016040528060278152602001612d6e602791396060600080856001600160a01b031685604051611d4f9190612c98565b600060405180830381855af49150503d8060008114611d8a576040519150601f19603f3d011682016040523d82523d6000602084013e611d8f565b606091505b5091509150611da086838387611daa565b9695505050505050565b60608315611de7578251600003611de057611dc485611244565b611de05760405162461bcd60e51b815260040161063f90612cd8565b5081611df1565b611df18383611df9565b949350505050565b815115611e095781518083602001fd5b8060405162461bcd60e51b815260040161063f9190612d1c565b60006001600160a01b038216610e65565b611e3d81611e23565b82525050565b60208101610e658284611e34565b61ffff81165b811461082357600080fd5b8035610e6581611e51565b600060208284031215611e8257611e82600080fd5b6000611df18484611e62565b801515611e3d565b60208101610e658284611e8e565b61ffff8116611e3d565b60208101610e658284611ea4565b60008060408385031215611ed257611ed2600080fd5b6000611ede8585611e62565b9250506020611eef85828601611e62565b9150509250929050565b6001600160401b031690565b611e5781611ef9565b8035610e6581611f05565b600060208284031215611f2e57611f2e600080fd5b6000611df18484611f0e565b611e5781611e23565b8035610e6581611f3a565b600060208284031215611f6357611f63600080fd5b6000611df18484611f43565b60ff8116611e3d565b60208101610e658284611f6f565b60008060408385031215611f9c57611f9c600080fd5b6000611fa88585611f43565b9250506020611eef85828601611f43565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b611fe282611fb9565b81018181106001600160401b0382111715611fff57611fff611fc3565b6040525050565b600061201160405190565b90506110ad8282611fd9565b60006001600160401b0382111561203657612036611fc3565b61203f82611fb9565b60200192915050565b82818337506000910152565b60006120676120628461201d565b612006565b90508281526020810184848401111561208257612082600080fd5b6119fa848285612048565b600082601f8301126120a1576120a1600080fd5b8135611df1848260208601612054565b600080604083850312156120c7576120c7600080fd5b60006120d38585611f43565b92505060208301356001600160401b038111156120f2576120f2600080fd5b611eef8582860161208d565b60006001600160401b0382111561211757612117611fc3565b5060209081020190565b600061212f612062846120fe565b8381529050602080820190840283018581111561214e5761214e600080fd5b835b8181101561217257806121638882611e62565b84525060209283019201612150565b5050509392505050565b600082601f83011261219057612190600080fd5b8135611df1848260208601612121565b63ffffffff8116611e57565b8035610e65816121a0565b60006121c5612062846120fe565b838152905060208082019084028301858111156121e4576121e4600080fd5b835b8181101561217257806121f988826121ac565b845250602092830192016121e6565b600082601f83011261221c5761221c600080fd5b8135611df18482602086016121b7565b600061223a612062846120fe565b8381529050602080820190840283018581111561225957612259600080fd5b835b818110156121725780356001600160401b0381111561227c5761227c600080fd5b8086016122898982612208565b855250506020928301920161225b565b600082601f8301126122ad576122ad600080fd5b8135611df184826020860161222c565b6000806000606084860312156122d5576122d5600080fd5b83356001600160401b038111156122ee576122ee600080fd5b6122fa8682870161217c565b93505060208401356001600160401b0381111561231957612319600080fd5b6123258682870161217c565b92505060408401356001600160401b0381111561234457612344600080fd5b61235086828701612299565b9150509250925092565b80611e3d565b60208101610e65828461235a565b600061237c612062846120fe565b8381529050602080820190840283018581111561239b5761239b600080fd5b835b8181101561217257806123b08882611f43565b8452506020928301920161239d565b600082601f8301126123d3576123d3600080fd5b8135611df184826020860161236e565b60006123f1612062846120fe565b8381529050602080820190840283018581111561241057612410600080fd5b835b818110156121725780356001600160401b0381111561243357612433600080fd5b80860161244089826123bf565b8552505060209283019201612412565b600082601f83011261246457612464600080fd5b8135611df18482602086016123e3565b600080600080600060a0868803121561248f5761248f600080fd5b85356001600160401b038111156124a8576124a8600080fd5b6124b488828901612450565b95505060208601356001600160401b038111156124d3576124d3600080fd5b6124df88828901612450565b94505060408601356001600160401b038111156124fe576124fe600080fd5b61250a8882890161217c565b93505060608601356001600160401b0381111561252957612529600080fd5b6125358882890161217c565b92505060808601356001600160401b0381111561255457612554600080fd5b61256088828901612299565b9150509295509295909350565b60ff8116611e57565b8035610e658161256d565b60006020828403121561259657612596600080fd5b6000611df18484612576565b600080604083850312156125b8576125b8600080fd5b60006125c48585611f0e565b9250506020611eef85828601611f0e565b6000806000606084860312156125ed576125ed600080fd5b60006125f98686611e62565b935050602061260a86828701611e62565b925050604061235086828701611e62565b611e3d81611ef9565b60208101610e65828461261b565b601d81526000602082017f4f6e6c7920616c6c6f77656420616464726573732063616e2063616c6c000000815291505b5060200190565b60208082528101610e6581612632565b601681526000602082017556616c7565206d757374206e6f74206265207a65726f60501b81529150612662565b60208082528101610e6581612679565b604081016126c48285611ea4565b610a6b6020830184611ea4565b602c8152600060208201600080516020612d2e83398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b60208082528101610e65816126d1565b602c8152600060208201600080516020612d2e83398151915281526b6163746976652070726f787960a01b60208201529150612704565b60208082528101610e658161271b565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150612704565b60208082528101610e6581612762565b600060ff8216610e65565b611e3d816127bd565b60208101610e6582846127c8565b600061ffff8216610e65565b611e3d816127df565b60208101610e6582846127eb565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150612704565b60208082528101610e6581612802565b6000610e6560ff8316611ef9565b611e3d81612867565b60208101610e658284612875565b634e487b7160e01b600052601160045260246000fd5b60006128ad82611ef9565b91506128b883611ef9565b92508282026128c681611ef9565b91508082146128d7576128d761288c565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60006128ff82611ef9565b915061290a83611ef9565b925082612919576129196128de565b500490565b61ffff918216919081169082820390811115610e6557610e6561288c565b61ffff918216919081169082820190811115610e6557610e6561288c565b60408101612968828561235a565b610a6b6020830184611e34565b801515611e57565b8051610e6581612975565b60006020828403121561299d5761299d600080fd5b6000611df1848461297d565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b81529150612662565b60208082528101610e65816129a9565b80611e57565b8051610e65816129ea565b600060208284031215612a1057612a10600080fd5b6000611df184846129f0565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150612704565b60208082528101610e6581612a1c565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150612704565b60208082528101610e6581612a77565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150612704565b60208082528101610e6581612acd565b634e487b7160e01b600052603260045260246000fd5b601081526000602082016f10da5d1e481a5cc81c995c5d5a5c995960821b81529150612662565b60208082528101610e6581612b3b565b63ffffffff16600063fffffffe198201612b8e57612b8e61288c565b5060010190565b60006000198203612b8e57612b8e61288c565b6016815260006020820175496e76616c6964206475706c6963617465206369747960501b81529150612662565b60208082528101610e6581612ba8565b80820180821115610e6557610e6561288c565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150612704565b60208082528101610e6581612bf8565b60005b83811015612c6d578181015183820152602001612c55565b50506000910152565b6000612c80825190565b612c8e818560208601612c52565b9290920192915050565b6000610a6b8284612c76565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150612662565b60208082528101610e6581612ca4565b6000612cf2825190565b808452602084019350612d09818560208601612c52565b612d1281611fb9565b9093019392505050565b60208082528101610a6b8184612ce856fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122050a8a902232c21a6ef17fec67fce4e6f2870cbc57af6c2613ad311eca703a6a964736f6c63430008150033",
  "deployedBytecode": "0x60806040526004361061017e5760003560e01c80630143dd8614610183578063037864d2146101b95780630d73ce49146101e657806310f247591461021557806322ba9eb91461023757806322eede81146102595780632e6e21811461027b5780633659cfe61461029b578063388ee1e4146102bb578063441e5cda146102e9578063485cc955146103095780634f1ef2861461032957806350cc591f1461033c578063526cb8bf1461035c57806352d1902d1461037c57806353160a631461039e578063591abc51146103c05780635ac47b27146103e05780636f52df711461040057806384cbe2ee146104205780638e2f7e07146104425780639017e5da146104625780639ba6cf3d146104825780639eaa0818146104a2578063a155c939146104c2578063a54bfaf3146104dd578063a8bbce4a146104fd578063aaf10f421461051f578063b333af1414610534578063b363e1f514610554578063b77af5b914610574578063e502523c14610594578063f4e5f7bd146105b4575b600080fd5b34801561018f57600080fd5b506066546101a3906001600160a01b031681565b6040516101b09190611e43565b60405180910390f35b3480156101c557600080fd5b506101d96101d4366004611e6d565b6105e8565b6040516101b09190611e96565b3480156101f257600080fd5b5060665461020890600160b01b900461ffff1681565b6040516101b09190611eae565b34801561022157600080fd5b5060685461020890600160281b900461ffff1681565b34801561024357600080fd5b50610257610252366004611ebc565b610614565b005b34801561026557600080fd5b5060685461020890600160481b900461ffff1681565b34801561028757600080fd5b50610257610296366004611f19565b6106d3565b3480156102a757600080fd5b506102576102b6366004611f4e565b61075e565b3480156102c757600080fd5b506068546102dc90600160981b900460ff1681565b6040516101b09190611f78565b3480156102f557600080fd5b506068546102dc9062010000900460ff1681565b34801561031557600080fd5b50610257610324366004611f86565b610826565b6102576103373660046120b1565b61096c565b34801561034857600080fd5b506101d96103573660046122bd565b610a25565b34801561036857600080fd5b50610257610377366004611e6d565b610a72565b34801561038857600080fd5b50610391610ae7565b6040516101b09190612360565b3480156103aa57600080fd5b5060665461020890600160a01b900461ffff1681565b3480156103cc57600080fd5b506102576103db366004611e6d565b610b44565b3480156103ec57600080fd5b506102576103fb366004611e6d565b610bb9565b34801561040c57600080fd5b506101d961041b366004612474565b610c2e565b34801561042c57600080fd5b50606854610208906301000000900461ffff1681565b34801561044e57600080fd5b5061025761045d366004611e6d565b610cc8565b34801561046e57600080fd5b5061025761047d366004612581565b610d3d565b34801561048e57600080fd5b5061025761049d366004611e6d565b610db0565b3480156104ae57600080fd5b506101d96104bd3660046125a2565b610e1c565b3480156104ce57600080fd5b506068546102089061ffff1681565b3480156104e957600080fd5b506102576104f8366004612581565b610e6b565b34801561050957600080fd5b5060685461020890600160381b900461ffff1681565b34801561052b57600080fd5b506101a3610edc565b34801561054057600080fd5b506101d961054f3660046125d5565b610eeb565b34801561056057600080fd5b5061025761056f366004611e6d565b610f78565b34801561058057600080fd5b5061025761058f366004611e6d565b610fed565b3480156105a057600080fd5b506102086105af366004611e6d565b611062565b3480156105c057600080fd5b506068546105db90600160581b90046001600160401b031681565b6040516101b09190612624565b60685460009061ffff600160281b9091048116908316111561060c57506000919050565b506001919050565b6066546001600160a01b03163381146106485760405162461bcd60e51b815260040161063f90612669565b60405180910390fd5b61ffff8216600081900361066e5760405162461bcd60e51b815260040161063f906126a6565b61ffff84811660009081526067602052604090819020805461ffff191692861692909217909155517f8ab4eba2d4f9e3a97284cfd4fe6c8fa42683ddf246884a2a5dd80f71155b9b6a906106c590869086906126b6565b60405180910390a150505050565b6066546001600160a01b03163381146106fe5760405162461bcd60e51b815260040161063f90612669565b60688054600160581b600160981b031916600160581b6001600160401b038516021790556040517f1638393c4a55a697b67b203f5a98cad8e01692bcd3120d675a50db08cfb8bf8590610752908490612624565b60405180910390a15050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036107a65760405162461bcd60e51b815260040161063f9061270b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166107d86110b2565b6001600160a01b0316146107fe5760405162461bcd60e51b815260040161063f90612752565b610807816110ce565b6040805160008082526020820190925261082391839190611162565b50565b600054610100900460ff16158080156108465750600054600160ff909116105b80610867575061085530611244565b158015610867575060005460ff166001145b6108835760405162461bcd60e51b815260040161063f906127ad565b6000805460ff1916600117905580156108a6576000805461ff0019166101001790555b606580546001600160a01b03199081166001600160a01b038581169190911790925560668054600160b01b9387166001600160b01b031990911617600360a01b1761ffff60b01b19169290921790915560688054909116690a000500010005280001630a00001960811b0117905561091c611253565b8015610967576000805461ff00191690556040517f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989061095e906001906127d1565b60405180910390a15b505050565b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001630036109b45760405162461bcd60e51b815260040161063f9061270b565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166109e66110b2565b6001600160a01b031614610a0c5760405162461bcd60e51b815260040161063f90612752565b610a15826110ce565b610a2182826001611162565b5050565b6000610a308461127c565b610a3c57506000610a6b565b610a4683836112b2565b610a5257506000610a6b565b610a5b82611402565b610a6757506000610a6b565b5060015b9392505050565b6066546001600160a01b0316338114610a9d5760405162461bcd60e51b815260040161063f90612669565b6068805461ffff60481b1916600160481b61ffff8516021790556040517ff3e1e0209d38dd56f8504bdc185d9ce72a34fa9d5b6e808065560ec6084c7c6e906107529084906127f4565b6000306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610b315760405162461bcd60e51b815260040161063f90612857565b50600080516020612d4e83398151915290565b6066546001600160a01b0316338114610b6f5760405162461bcd60e51b815260040161063f90612669565b6068805461ffff60381b1916600160381b61ffff8516021790556040517f989560ddf0d69e0698028d5a7c597da8f58582a5313f17ddef330466673014e5906107529084906127f4565b6066546001600160a01b0316338114610be45760405162461bcd60e51b815260040161063f90612669565b6068805461ffff60281b1916600160281b61ffff8516021790556040517f7cd9f9c39b6ef5f9be70105d3d19deae176dba103dd39f60aa9618191b254c7e906107529084906127f4565b600085518451141580610c4357508451845114155b80610c5057508251845114155b80610c5d57508151845114155b15610c6a57506000610cbf565b6068548451600160481b90910461ffff161080610c9557506068548451600160381b90910461ffff16115b80610cae57506068548451630100000090910461ffff16115b15610cbb57506000610cbf565b5060015b95945050505050565b6066546001600160a01b0316338114610cf35760405162461bcd60e51b815260040161063f90612669565b6066805461ffff60b01b1916600160b01b61ffff8516021790556040517f3dbf7a2575028a05ffc2141b7b21a5ff5bf242f97ffc79f0691636b590c40b5b906107529084906127f4565b6066546001600160a01b0316338114610d685760405162461bcd60e51b815260040161063f90612669565b6068805460ff60981b1916600160981b60ff8516021790556040517f0aa0c61a91b651e8b70878d66dacee7f4f914728325a7f3a60320bfc8c4ac14b9061075290849061287e565b6066546001600160a01b0316338114610ddb5760405162461bcd60e51b815260040161063f90612669565b6068805461ffff191661ffff84161790556040517f7ffa68e54076df69500ebc7d9f525705d16b0b94ee599bfb4a84671f05ed469a906107529084906127f4565b60008082610e2c856127106128a2565b610e3691906128f4565b60685490915062010000900460ff166001600160401b0382161115610e5f576000915050610e65565b60019150505b92915050565b6066546001600160a01b0316338114610e965760405162461bcd60e51b815260040161063f90612669565b6068805462ff000019166201000060ff8516021790556040517fe966ef613df3398310b903faa1cda91b74c995736186944a358f9a28192638e890610752908490611f78565b6000610ee66110b2565b905090565b60685460009061ffff6301000000909104811690831610610f0e57506001610a6b565b8361ffff168261ffff16101580610f2d57508361ffff168361ffff1610155b15610f3a57506000610a6b565b6068546301000000900461ffff1682610f53858761291e565b610f5d919061293c565b61ffff1610610f6e57506001610a6b565b5060009392505050565b6066546001600160a01b0316338114610fa35760405162461bcd60e51b815260040161063f90612669565b6066805461ffff60a01b1916600160a01b61ffff8516021790556040517fade71b85c95015240c5fe8cb16620452565116b622a9f86e1bbd7cff817d0078906107529084906127f4565b6066546001600160a01b03163381146110185760405162461bcd60e51b815260040161063f90612669565b6068805464ffff0000001916630100000061ffff8516021790556040517f7d1d04ce8d3c095f3441cdafa66195f2468f0d1cd868bf891ac9c1b1e623607d906107529084906127f4565b61ffff8082166000908152606760205260408120549091168103611093575050606654600160b01b900461ffff1690565b5061ffff9081166000908152606760205260409020541690565b919050565b600080516020612d4e833981519152546001600160a01b031690565b606554604051632474521560e21b81526001600160a01b039091169060009082906391d1485490611105908490339060040161295a565b602060405180830381865afa158015611122573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111469190612988565b6109675760405162461bcd60e51b815260040161063f906129da565b7f4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd91435460ff1615611195576109678361161a565b826001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111ef575060408051601f3d908101601f191682019092526111ec918101906129fb565b60015b61120b5760405162461bcd60e51b815260040161063f90612a67565b600080516020612d4e83398151915281146112385760405162461bcd60e51b815260040161063f90612abd565b5061096783838361166e565b6001600160a01b03163b151590565b600054610100900460ff1661127a5760405162461bcd60e51b815260040161063f90612b15565b565b60008061128883611699565b606654909150600160a01b900461ffff168110156112a95750600092915050565b50600192915050565b60008060006112c0856117cc565b9150915060005b82811015610cbb5760006112fd8383815181106112e6576112e6612b25565b6020026020010151886119a490919063ffffffff16565b905060018111156113b55760005b87518163ffffffff1610156113b357878163ffffffff168151811061133257611332612b25565b602002602001015161ffff1684848151811061135057611350612b25565b602002602001015161ffff16036113a1576000878263ffffffff168151811061137b5761137b612b25565b602002602001015151116113a15760405162461bcd60e51b815260040161063f90612b62565b806113ab81612b72565b91505061130b565b505b6113d78383815181106113ca576113ca612b25565b6020026020010151611062565b61ffff168111156113ef576000945050505050610e65565b50806113fa81612b95565b9150506112c7565b600080805b83518110156114895761143284828151811061142557611425612b25565b6020026020010151611a02565b1561144f5760405162461bcd60e51b815260040161063f90612bd5565b83818151811061146157611461612b25565b602002602001015151826114759190612be5565b91508061148181612b95565b915050611407565b506000816001600160401b038111156114a4576114a4611fc3565b6040519080825280602002602001820160405280156114cd578160200160208202803683370190505b5090506000805b855181101561158f5760005b8682815181106114f2576114f2612b25565b60200260200101515181101561157c5786828151811061151457611514612b25565b6020026020010151818151811061152d5761152d612b25565b602002602001015184848151811061154757611547612b25565b63ffffffff909216602092830291909101909101528261156681612b95565b935050808061157490612b95565b9150506114e0565b508061158781612b95565b9150506114d4565b5060008061159c84611aa5565b9150915060005b8281101561160c5760006115d98383815181106115c2576115c2612b25565b602002602001015187611c7890919063ffffffff16565b60685490915061ffff168111156115f95750600098975050505050505050565b508061160481612b95565b9150506115a3565b506001979650505050505050565b61162381611244565b61163f5760405162461bcd60e51b815260040161063f90612c42565b600080516020612d4e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b61167783611cd2565b6000825111806116845750805b15610967576116938383611d12565b50505050565b60008060009050600083516001600160401b038111156116bb576116bb611fc3565b6040519080825280602002602001820160405280156116e4578160200160208202803683370190505b50905060005b84518110156117c357600160005b8481101561175c5783818151811061171257611712612b25565b602002602001015161ffff1687848151811061173057611730612b25565b602002602001015161ffff160361174a576000915061175c565b8061175481612b95565b9150506116f8565b5080156117b05785828151811061177557611775612b25565b602002602001015183858151811061178f5761178f612b25565b61ffff90921660209283029190910190910152836117ac81612b95565b9450505b50806117bb81612b95565b9150506116ea565b50909392505050565b6000606060008084516001600160401b038111156117ec576117ec611fc3565b604051908082528060200260200182016040528015611815578160200160208202803683370190505b50905060005b85518110156118f457600160005b8481101561188d5783818151811061184357611843612b25565b602002602001015161ffff1688848151811061186157611861612b25565b602002602001015161ffff160361187b576000915061188d565b8061188581612b95565b915050611829565b5080156118e1578682815181106118a6576118a6612b25565b60200260200101518385815181106118c0576118c0612b25565b61ffff90921660209283029190910190910152836118dd81612b95565b9450505b50806118ec81612b95565b91505061181b565b506000826001600160401b0381111561190f5761190f611fc3565b604051908082528060200260200182016040528015611938578160200160208202803683370190505b50905060005b838110156119975782818151811061195857611958612b25565b602002602001015182828151811061197257611972612b25565b61ffff909216602092830291909101909101528061198f81612b95565b91505061193e565b5091959194509092505050565b600080805b84518110156119fa578361ffff168582815181106119c9576119c9612b25565b602002602001015161ffff16036119e857816119e481612b95565b9250505b806119f281612b95565b9150506119a9565b509392505050565b6000805b8251811015611a9c576000611a1c826001612be5565b90505b8351811015611a8957838181518110611a3a57611a3a612b25565b602002602001015163ffffffff16848381518110611a5a57611a5a612b25565b602002602001015163ffffffff1603611a77575060019392505050565b80611a8181612b95565b915050611a1f565b5080611a9481612b95565b915050611a06565b50600092915050565b6000606060008084516001600160401b03811115611ac557611ac5611fc3565b604051908082528060200260200182016040528015611aee578160200160208202803683370190505b50905060005b8551811015611bd357600160005b84811015611b6a57838181518110611b1c57611b1c612b25565b602002602001015163ffffffff16888481518110611b3c57611b3c612b25565b602002602001015163ffffffff1603611b585760009150611b6a565b80611b6281612b95565b915050611b02565b508015611bc057868281518110611b8357611b83612b25565b6020026020010151838581518110611b9d57611b9d612b25565b63ffffffff9092166020928302919091019091015283611bbc81612b95565b9450505b5080611bcb81612b95565b915050611af4565b506000826001600160401b03811115611bee57611bee611fc3565b604051908082528060200260200182016040528015611c17578160200160208202803683370190505b50905060005b8381101561199757828181518110611c3757611c37612b25565b6020026020010151828281518110611c5157611c51612b25565b63ffffffff9092166020928302919091019091015280611c7081612b95565b915050611c1d565b600080805b84518110156119fa578363ffffffff16858281518110611c9f57611c9f612b25565b602002602001015163ffffffff1603611cc05781611cbc81612b95565b9250505b80611cca81612b95565b915050611c7d565b611cdb8161161a565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060610a6b8383604051806060016040528060278152602001612d6e602791396060600080856001600160a01b031685604051611d4f9190612c98565b600060405180830381855af49150503d8060008114611d8a576040519150601f19603f3d011682016040523d82523d6000602084013e611d8f565b606091505b5091509150611da086838387611daa565b9695505050505050565b60608315611de7578251600003611de057611dc485611244565b611de05760405162461bcd60e51b815260040161063f90612cd8565b5081611df1565b611df18383611df9565b949350505050565b815115611e095781518083602001fd5b8060405162461bcd60e51b815260040161063f9190612d1c565b60006001600160a01b038216610e65565b611e3d81611e23565b82525050565b60208101610e658284611e34565b61ffff81165b811461082357600080fd5b8035610e6581611e51565b600060208284031215611e8257611e82600080fd5b6000611df18484611e62565b801515611e3d565b60208101610e658284611e8e565b61ffff8116611e3d565b60208101610e658284611ea4565b60008060408385031215611ed257611ed2600080fd5b6000611ede8585611e62565b9250506020611eef85828601611e62565b9150509250929050565b6001600160401b031690565b611e5781611ef9565b8035610e6581611f05565b600060208284031215611f2e57611f2e600080fd5b6000611df18484611f0e565b611e5781611e23565b8035610e6581611f3a565b600060208284031215611f6357611f63600080fd5b6000611df18484611f43565b60ff8116611e3d565b60208101610e658284611f6f565b60008060408385031215611f9c57611f9c600080fd5b6000611fa88585611f43565b9250506020611eef85828601611f43565b601f01601f191690565b634e487b7160e01b600052604160045260246000fd5b611fe282611fb9565b81018181106001600160401b0382111715611fff57611fff611fc3565b6040525050565b600061201160405190565b90506110ad8282611fd9565b60006001600160401b0382111561203657612036611fc3565b61203f82611fb9565b60200192915050565b82818337506000910152565b60006120676120628461201d565b612006565b90508281526020810184848401111561208257612082600080fd5b6119fa848285612048565b600082601f8301126120a1576120a1600080fd5b8135611df1848260208601612054565b600080604083850312156120c7576120c7600080fd5b60006120d38585611f43565b92505060208301356001600160401b038111156120f2576120f2600080fd5b611eef8582860161208d565b60006001600160401b0382111561211757612117611fc3565b5060209081020190565b600061212f612062846120fe565b8381529050602080820190840283018581111561214e5761214e600080fd5b835b8181101561217257806121638882611e62565b84525060209283019201612150565b5050509392505050565b600082601f83011261219057612190600080fd5b8135611df1848260208601612121565b63ffffffff8116611e57565b8035610e65816121a0565b60006121c5612062846120fe565b838152905060208082019084028301858111156121e4576121e4600080fd5b835b8181101561217257806121f988826121ac565b845250602092830192016121e6565b600082601f83011261221c5761221c600080fd5b8135611df18482602086016121b7565b600061223a612062846120fe565b8381529050602080820190840283018581111561225957612259600080fd5b835b818110156121725780356001600160401b0381111561227c5761227c600080fd5b8086016122898982612208565b855250506020928301920161225b565b600082601f8301126122ad576122ad600080fd5b8135611df184826020860161222c565b6000806000606084860312156122d5576122d5600080fd5b83356001600160401b038111156122ee576122ee600080fd5b6122fa8682870161217c565b93505060208401356001600160401b0381111561231957612319600080fd5b6123258682870161217c565b92505060408401356001600160401b0381111561234457612344600080fd5b61235086828701612299565b9150509250925092565b80611e3d565b60208101610e65828461235a565b600061237c612062846120fe565b8381529050602080820190840283018581111561239b5761239b600080fd5b835b8181101561217257806123b08882611f43565b8452506020928301920161239d565b600082601f8301126123d3576123d3600080fd5b8135611df184826020860161236e565b60006123f1612062846120fe565b8381529050602080820190840283018581111561241057612410600080fd5b835b818110156121725780356001600160401b0381111561243357612433600080fd5b80860161244089826123bf565b8552505060209283019201612412565b600082601f83011261246457612464600080fd5b8135611df18482602086016123e3565b600080600080600060a0868803121561248f5761248f600080fd5b85356001600160401b038111156124a8576124a8600080fd5b6124b488828901612450565b95505060208601356001600160401b038111156124d3576124d3600080fd5b6124df88828901612450565b94505060408601356001600160401b038111156124fe576124fe600080fd5b61250a8882890161217c565b93505060608601356001600160401b0381111561252957612529600080fd5b6125358882890161217c565b92505060808601356001600160401b0381111561255457612554600080fd5b61256088828901612299565b9150509295509295909350565b60ff8116611e57565b8035610e658161256d565b60006020828403121561259657612596600080fd5b6000611df18484612576565b600080604083850312156125b8576125b8600080fd5b60006125c48585611f0e565b9250506020611eef85828601611f0e565b6000806000606084860312156125ed576125ed600080fd5b60006125f98686611e62565b935050602061260a86828701611e62565b925050604061235086828701611e62565b611e3d81611ef9565b60208101610e65828461261b565b601d81526000602082017f4f6e6c7920616c6c6f77656420616464726573732063616e2063616c6c000000815291505b5060200190565b60208082528101610e6581612632565b601681526000602082017556616c7565206d757374206e6f74206265207a65726f60501b81529150612662565b60208082528101610e6581612679565b604081016126c48285611ea4565b610a6b6020830184611ea4565b602c8152600060208201600080516020612d2e83398151915281526b19195b1959d85d1958d85b1b60a21b602082015291505b5060400190565b60208082528101610e65816126d1565b602c8152600060208201600080516020612d2e83398151915281526b6163746976652070726f787960a01b60208201529150612704565b60208082528101610e658161271b565b602e81526000602082017f496e697469616c697a61626c653a20636f6e747261637420697320616c72656181526d191e481a5b9a5d1a585b1a5e995960921b60208201529150612704565b60208082528101610e6581612762565b600060ff8216610e65565b611e3d816127bd565b60208101610e6582846127c8565b600061ffff8216610e65565b611e3d816127df565b60208101610e6582846127eb565b603881526000602082017f555550535570677261646561626c653a206d757374206e6f742062652063616c8152771b1959081d1a1c9bdd59da0819195b1959d85d1958d85b1b60421b60208201529150612704565b60208082528101610e6581612802565b6000610e6560ff8316611ef9565b611e3d81612867565b60208101610e658284612875565b634e487b7160e01b600052601160045260246000fd5b60006128ad82611ef9565b91506128b883611ef9565b92508282026128c681611ef9565b91508082146128d7576128d761288c565b5092915050565b634e487b7160e01b600052601260045260246000fd5b60006128ff82611ef9565b915061290a83611ef9565b925082612919576129196128de565b500490565b61ffff918216919081169082820390811115610e6557610e6561288c565b61ffff918216919081169082820190811115610e6557610e6561288c565b60408101612968828561235a565b610a6b6020830184611e34565b801515611e57565b8051610e6581612975565b60006020828403121561299d5761299d600080fd5b6000611df1848461297d565b601a81526000602082017913db9b1e48185b1b1bddd959081c9bdb194818d85b8818d85b1b60321b81529150612662565b60208082528101610e65816129a9565b80611e57565b8051610e65816129ea565b600060208284031215612a1057612a10600080fd5b6000611df184846129f0565b602e81526000602082017f45524331393637557067726164653a206e657720696d706c656d656e7461746981526d6f6e206973206e6f74205555505360901b60208201529150612704565b60208082528101610e6581612a1c565b602981526000602082017f45524331393637557067726164653a20756e737570706f727465642070726f788152681a58589b195555525160ba1b60208201529150612704565b60208082528101610e6581612a77565b602b81526000602082017f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206981526a6e697469616c697a696e6760a81b60208201529150612704565b60208082528101610e6581612acd565b634e487b7160e01b600052603260045260246000fd5b601081526000602082016f10da5d1e481a5cc81c995c5d5a5c995960821b81529150612662565b60208082528101610e6581612b3b565b63ffffffff16600063fffffffe198201612b8e57612b8e61288c565b5060010190565b60006000198203612b8e57612b8e61288c565b6016815260006020820175496e76616c6964206475706c6963617465206369747960501b81529150612662565b60208082528101610e6581612ba8565b80820180821115610e6557610e6561288c565b602d81526000602082017f455243313936373a206e657720696d706c656d656e746174696f6e206973206e81526c1bdd08184818dbdb9d1c9858dd609a1b60208201529150612704565b60208082528101610e6581612bf8565b60005b83811015612c6d578181015183820152602001612c55565b50506000910152565b6000612c80825190565b612c8e818560208601612c52565b9290920192915050565b6000610a6b8284612c76565b601d81526000602082017f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000081529150612662565b60208082528101610e6581612ca4565b6000612cf2825190565b808452602084019350612d09818560208601612c52565b612d1281611fb9565b9093019392505050565b60208082528101610a6b8184612ce856fe46756e6374696f6e206d7573742062652063616c6c6564207468726f75676820360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a264697066735822122050a8a902232c21a6ef17fec67fce4e6f2870cbc57af6c2613ad311eca703a6a964736f6c63430008150033",
  "linkReferences": {},
  "deployedLinkReferences": {}
}
