0x608060405234801561001057600080fd5b50614e70806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c80639126a07511610130578063b6b55f25116100b8578063e3b898f51161007c578063e3b898f5146106b5578063e5be0ff4146106d3578063eb12d61e146106f1578063ec919f581461070d578063f8c8765e1461072b57610232565b8063b6b55f2514610625578063caa0f92a14610641578063cf220d9b1461065f578063d21220a71461067b578063d547741f1461069957610232565b8063983d2737116100ff578063983d2737146105675780639e67026c14610585578063a217fddf146105b5578063a58696cd146105d3578063b02c43d0146105ef57610232565b80639126a075146104cb57806391d14854146104e957806394cf795e146105195780639723fb6d1461053757610232565b806342f131c2116101be5780635ac159da116101825780635ac159da1461041557806364aff9ec14610431578063846279e71461044d578063883b524f1461047d5780638ad53106146104ad57610232565b806342f131c21461036157806344b8f7a9146103915780634ddc8ebf146103ad5780634feb116b146103dd578063516be0f8146103f957610232565b80632eb5c760116102055780632eb5c760146102d15780632f2ff15d146102ef5780633455a9db1461030b57806336568abe1461032957806341f368af1461034557610232565b806301ffc9a7146102375780630dfe1681146102675780631a0ef72714610285578063248a9ca3146102a1575b600080fd5b610251600480360381019061024c91906134d0565b610747565b60405161025e9190613518565b60405180910390f35b61026f6107c1565b60405161027c9190613574565b60405180910390f35b61029f600480360381019061029a91906135c5565b6107e7565b005b6102bb60048036038101906102b69190613628565b610bc8565b6040516102c89190613664565b60405180910390f35b6102d9610be8565b6040516102e69190613518565b60405180910390f35b610309600480360381019061030491906136ab565b610bfb565b005b610313610c1c565b6040516103209190613574565b60405180910390f35b610343600480360381019061033e91906136ab565b610c42565b005b61035f600480360381019061035a91906136eb565b610cc5565b005b61037b600480360381019061037691906136eb565b610d4a565b604051610388919061373a565b60405180910390f35b6103ab60048036038101906103a691906135c5565b610d6f565b005b6103c760048036038101906103c291906135c5565b610de4565b6040516103d4919061373a565b60405180910390f35b6103f760048036038101906103f29190613802565b610dfc565b005b610413600480360381019061040e91906138a2565b61106c565b005b61042f600480360381019061042a91906135c5565b6110b4565b005b61044b600480360381019061044691906138cf565b61146a565b005b61046760048036038101906104629190613922565b6114c5565b604051610474919061373a565b60405180910390f35b61049760048036038101906104929190613922565b6114dd565b6040516104a49190613518565b60405180910390f35b6104b5611594565b6040516104c2919061373a565b60405180910390f35b6104d361159a565b6040516104e0919061373a565b60405180910390f35b61050360048036038101906104fe91906136ab565b6115a0565b6040516105109190613518565b60405180910390f35b61052161160b565b60405161052e9190613a0d565b60405180910390f35b610551600480360381019061054c91906135c5565b61161c565b60405161055e9190613518565b60405180910390f35b61056f61163c565b60405161057c9190613664565b60405180910390f35b61059f600480360381019061059a9190613922565b611660565b6040516105ac9190613574565b60405180910390f35b6105bd611705565b6040516105ca9190613664565b60405180910390f35b6105ed60048036038101906105e89190613922565b61170c565b005b610609600480360381019061060491906135c5565b6117a0565b60405161061c9796959493929190613a2f565b60405180910390f35b61063f600480360381019061063a91906135c5565b61180f565b005b610649612051565b604051610656919061373a565b60405180910390f35b610679600480360381019061067491906135c5565b61205b565b005b6106836120d2565b6040516106909190613574565b60405180910390f35b6106b360048036038101906106ae91906136ab565b6120f8565b005b6106bd612119565b6040516106ca9190613574565b60405180910390f35b6106db61213f565b6040516106e8919061373a565b60405180910390f35b61070b60048036038101906107069190613922565b612145565b005b6107156121f7565b6040516107229190613574565b60405180910390f35b61074560048036038101906107409190613a9e565b61221d565b005b60007f7965db0b000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107ba57506107b9826124ed565b5b9050919050565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600060a460008381526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152505090508060c00151156108f1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e890613b62565b60405180910390fd5b6301e133808160a00151426109069190613bb1565b11610946576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093d90613c31565b60405180910390fd5b60008160800151426109589190613bb1565b905062015180811161099f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099690613cc3565b60405180910390fd5b4282608001818152505060018260c0019015159081151581525050610a4733609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064603286604001516109f49190613ce3565b6109fe9190613d54565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612557909392919063ffffffff16565b610abc33609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff168460600151609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612557909392919063ffffffff16565b8160a4600085815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff02191690831515021790555090505082610b756125e0565b73ffffffffffffffffffffffffffffffffffffffff167fa5c1f57bdc88c2f5f476801b8751d0a619af6878b9dfe2662cd323d154de59a86001604051610bbb9190613518565b60405180910390a3505050565b600060656000838152602001908152602001600020600101549050919050565b609b60009054906101000a900460ff1681565b610c0482610bc8565b610c0d816125e8565b610c1783836125fc565b505050565b609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610c4a6125e0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613df7565b60405180910390fd5b610cc182826126dd565b5050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610cef816125e8565b8160a360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d3e9190613e17565b92505081905550505050565b60a1602052816000526040600020602052806000526040600020600091509150505481565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c610d99816125e8565b816098819055507f6390ad885d33ab99429bfed7e681df33e0567d6a3bbbcc2ca9c39303c85fbe8c610dc96125e0565b83604051610dd8929190613e4b565b60405180910390a15050565b60a06020528060005260406000206000915090505481565b60a26000846fffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1615610e6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6690613ee6565b60405180910390fd5b83655af3107a400011158015610e9457506dffffffffffffffffffffffffffff801684105b610ed3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eca90613f52565b60405180910390fd5b600160a26000856fffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600030609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16338787604051602001610f4e959493929190613f81565b604051602081830303815290604052805190602001209050610f7e81848460a56127bf909392919063ffffffff16565b610fcb3386609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128109092919063ffffffff16565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16846fffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f2c45ac829d8f8037110218ea5264cda8453389da5e75ce1c9850ce0113352a3f8860405161105d919061373a565b60405180910390a45050505050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611096816125e8565b81609b60006101000a81548160ff0219169083151502179055505050565b600060a460008381526020019081526020016000206040518060e00160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200160018201548152602001600282015481526020016003820154815260200160048201548152602001600582015481526020016006820160009054906101000a900460ff16151515158152505090508060c001516111bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b490613b62565b60405180910390fd5b6111c56125e0565b73ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611236576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122d90614020565b60405180910390fd5b6201518081608001514261124a9190613bb1565b1161128a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128190613cc3565b60405180910390fd5b4281608001818152505060008160c001901515908115158152505061130e336064603284604001516112bc9190613ce3565b6112c69190613d54565b609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128109092919063ffffffff16565b61135f338260600151609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166128109092919063ffffffff16565b8060a4600084815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908315150217905550905050816114186125e0565b73ffffffffffffffffffffffffffffffffffffffff167fa5c1f57bdc88c2f5f476801b8751d0a619af6878b9dfe2662cd323d154de59a8600060405161145e9190613518565b60405180910390a35050565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611494816125e8565b6114bf83838673ffffffffffffffffffffffffffffffffffffffff166128109092919063ffffffff16565b50505050565b60a36020528060005260406000206000915090505481565b60007f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611509816125e8565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611578576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156f906140b2565b60405180910390fd5b61158c8360a561289690919063ffffffff16565b915050919050565b60995481565b60975481565b60006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b606061161760a56128c6565b905090565b60a26020528060005260406000206000915054906101000a900460ff1681565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c81565b6000609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e67026c836040518263ffffffff1660e01b81526004016116bd9190613574565b602060405180830381865afa1580156116da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116fe91906140e7565b9050919050565b6000801b81565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c611736816125e8565b8173ffffffffffffffffffffffffffffffffffffffff16609b60019054906101000a905050507ffd5a191eeee6a74a5073db0d192a8d797fc96f95fac71268950b1adc8981774e6117856125e0565b83604051611794929190614114565b60405180910390a15050565b60a46020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154908060020154908060030154908060040154908060050154908060060160009054906101000a900460ff16905087565b80609b60009054906101000a900460ff1661185f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185690614189565b60405180910390fd5b600060a160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006118aa6128e7565b815260200190815260200160002054146118f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f0906141f5565b60405180910390fd5b6000609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16639e67026c6119416125e0565b6040518263ffffffff1660e01b815260040161195d9190613574565b602060405180830381865afa15801561197a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199e91906140e7565b9050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611a0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0690614261565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663033768c56040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab791906140e7565b73ffffffffffffffffffffffffffffffffffffffff161480611b185750600060a360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054115b611b57576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b4e906142cd565b60405180910390fd5b609854821015611b9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9390614339565b60405180910390fd5b6099548260a06000611bac6128e7565b81526020019081526020016000206000828254611bc99190613e17565b9250508190551115611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c07906143a5565b60405180910390fd5b609a6000815480929190611c23906143c5565b91905055506000609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff1663a7521055336040518263ffffffff1660e01b8152600401611c889190613574565b602060405180830381865afa158015611ca5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cc99190614422565b611d39578073ffffffffffffffffffffffffffffffffffffffff166373d60fca336040518263ffffffff1660e01b8152600401611d069190613574565b600060405180830381600087803b158015611d2057600080fd5b505af1158015611d34573d6000803e3d6000fd5b505050505b8360a360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611d889190613e17565b925050819055508360a160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611dd96128e7565b81526020019081526020016000206000828254611df69190613e17565b92505081905550600061271060975486611e109190613ce3565b611e1a9190613d54565b90506040518060e00160405280611e2f6125e0565b73ffffffffffffffffffffffffffffffffffffffff1681526020018681526020018681526020018281526020014281526020014281526020016001151581525060a46000609a54815260200190815260200160002060008201518160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506020820151816001015560408201518160020155606082015181600301556080820151816004015560a0820151816005015560c08201518160060160006101000a81548160ff021916908315150217905550905050611f9133609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1687609e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612557909392919063ffffffff16565b61200233609b60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1683609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16612557909392919063ffffffff16565b7f996a417e6461fc8f287ec9a6c2e9afb764a1d6fbdaa6570826ae99855b453aff609a5461202e6125e0565b87888560405161204295949392919061444f565b60405180910390a15050505050565b6000609a54905090565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c612085816125e8565b816097819055507fc0997bc6d13153ceb2cd761327238a3abc6f4bc200edff68aa3bf1fbe98f785c6120b56125e0565b6097546040516120c6929190613e4b565b60405180910390a15050565b609f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61210182610bc8565b61210a816125e8565b61211483836126dd565b505050565b609c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60985481565b7f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61216f816125e8565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036121de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121d590614514565b60405180910390fd5b6121f28260a56128fd90919063ffffffff16565b505050565b609d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060019054906101000a900460ff1615905080801561224e5750600160008054906101000a900460ff1660ff16105b8061227b575061225d3061292d565b15801561227a5750600160008054906101000a900460ff1660ff16145b5b6122ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122b1906145a6565b60405180910390fd5b60016000806101000a81548160ff021916908360ff16021790555080156122f7576001600060016101000a81548160ff0219169083151502179055505b6122ff612950565b6123136000801b61230e6125e0565b6129a1565b6123447f523a704056dcd17bcf83bed8b68c59416dac1119be77755efe3bde0a64e46e0c61233f6125e0565b6129a1565b81609b60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084609d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555083609e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082609f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555061012c60978190555068056bc75e2d6310000060988190555069152d02c7e14af68000006099819055506001609b60006101000a81548160ff02191690831515021790555080156124e65760008060016101000a81548160ff0219169083151502179055507f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249860016040516124dd9190614618565b60405180910390a15b5050505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b6125da846323b872dd60e01b85858560405160240161257893929190614633565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129af565b50505050565b600033905090565b6125f9816125f46125e0565b612a77565b50565b61260682826115a0565b6126d95760016065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555061267e6125e0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a45b5050565b6126e782826115a0565b156127bb5760006065600084815260200190815260200160002060000160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506127606125e0565b73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16837ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b60405160405180910390a45b5050565b6127cb84848484612afc565b61280a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612801906146dc565b60405180910390fd5b50505050565b6128918363a9059cbb60e01b848460405160240161282f929190613e4b565b604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506129af565b505050565b60006128be836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612b68565b905092915050565b606060006128d683600001612c7c565b905060608190508092505050919050565b600062015180426128f89190613d54565b905090565b6000612925836000018373ffffffffffffffffffffffffffffffffffffffff1660001b612cd8565b905092915050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600060019054906101000a900460ff1661299f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129969061476e565b60405180910390fd5b565b6129ab82826125fc565b5050565b6000612a11826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c65648152508573ffffffffffffffffffffffffffffffffffffffff16612d489092919063ffffffff16565b9050600081511480612a33575080806020019051810190612a329190614422565b5b612a72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a6990614800565b60405180910390fd5b505050565b612a8182826115a0565b612af857612a8e81612d60565b612a9c8360001c6020612d8d565b604051602001612aad929190614929565b6040516020818303038152906040526040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aef91906149ad565b60405180910390fd5b5050565b6000612b5e612b4f8585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050612fc9565b86612ff090919063ffffffff16565b9050949350505050565b60008083600101600084815260200190815260200160002054905060008114612c70576000600182612b9a9190613bb1565b9050600060018660000180549050612bb29190613bb1565b9050818114612c21576000866000018281548110612bd357612bd26149cf565b5b9060005260206000200154905080876000018481548110612bf757612bf66149cf565b5b90600052602060002001819055508387600101600083815260200190815260200160002081905550505b85600001805480612c3557612c346149fe565b5b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050612c76565b60009150505b92915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015612ccc57602002820191906000526020600020905b815481526020019060010190808311612cb8575b50505050509050919050565b6000612ce48383613020565b612d3d578260000182908060018154018082558091505060019003906000526020600020016000909190919091505582600001805490508360010160008481526020019081526020016000208190555060019050612d42565b600090505b92915050565b6060612d578484600085613043565b90509392505050565b6060612d868273ffffffffffffffffffffffffffffffffffffffff16601460ff16612d8d565b9050919050565b606060006002836002612da09190613ce3565b612daa9190613e17565b67ffffffffffffffff811115612dc357612dc2614a2d565b5b6040519080825280601f01601f191660200182016040528015612df55781602001600182028036833780820191505090505b5090507f300000000000000000000000000000000000000000000000000000000000000081600081518110612e2d57612e2c6149cf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053507f780000000000000000000000000000000000000000000000000000000000000081600181518110612e9157612e906149cf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a90535060006001846002612ed19190613ce3565b612edb9190613e17565b90505b6001811115612f7b577f3031323334353637383961626364656600000000000000000000000000000000600f861660108110612f1d57612f1c6149cf565b5b1a60f81b828281518110612f3457612f336149cf565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600485901c945080612f7490614a5c565b9050612ede565b5060008414612fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb690614ad1565b60405180910390fd5b8091505092915050565b6000806000612fd88585613110565b91509150612fe581613161565b819250505092915050565b6000613018836000018373ffffffffffffffffffffffffffffffffffffffff1660001b613020565b905092915050565b600080836001016000848152602001908152602001600020541415905092915050565b606082471015613088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307f90614b63565b60405180910390fd5b6000808673ffffffffffffffffffffffffffffffffffffffff1685876040516130b19190614bca565b60006040518083038185875af1925050503d80600081146130ee576040519150601f19603f3d011682016040523d82523d6000602084013e6130f3565b606091505b5091509150613104878383876132c7565b92505050949350505050565b60008060418351036131515760008060006020860151925060408601519150606086015160001a90506131458782858561333c565b9450945050505061315a565b60006002915091505b9250929050565b6000600481111561317557613174614be1565b5b81600481111561318857613187614be1565b5b03156132c457600160048111156131a2576131a1614be1565b5b8160048111156131b5576131b4614be1565b5b036131f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131ec90614c5c565b60405180910390fd5b6002600481111561320957613208614be1565b5b81600481111561321c5761321b614be1565b5b0361325c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161325390614cc8565b60405180910390fd5b600360048111156132705761326f614be1565b5b81600481111561328357613282614be1565b5b036132c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132ba90614d5a565b60405180910390fd5b5b50565b60608315613329576000835103613321576132e18561292d565b613320576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161331790614dc6565b60405180910390fd5b5b829050613334565b613333838361341e565b5b949350505050565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08360001c1115613377576000600391509150613415565b60006001878787876040516000815260200160405260405161339c9493929190614df5565b6020604051602081039080840390855afa1580156133be573d6000803e3d6000fd5b505050602060405103519050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361340c57600060019250925050613415565b80600092509250505b94509492505050565b6000825111156134315781518083602001fd5b806040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161346591906149ad565b60405180910390fd5b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6134ad81613478565b81146134b857600080fd5b50565b6000813590506134ca816134a4565b92915050565b6000602082840312156134e6576134e561346e565b5b60006134f4848285016134bb565b91505092915050565b60008115159050919050565b613512816134fd565b82525050565b600060208201905061352d6000830184613509565b92915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061355e82613533565b9050919050565b61356e81613553565b82525050565b60006020820190506135896000830184613565565b92915050565b6000819050919050565b6135a28161358f565b81146135ad57600080fd5b50565b6000813590506135bf81613599565b92915050565b6000602082840312156135db576135da61346e565b5b60006135e9848285016135b0565b91505092915050565b6000819050919050565b613605816135f2565b811461361057600080fd5b50565b600081359050613622816135fc565b92915050565b60006020828403121561363e5761363d61346e565b5b600061364c84828501613613565b91505092915050565b61365e816135f2565b82525050565b60006020820190506136796000830184613655565b92915050565b61368881613553565b811461369357600080fd5b50565b6000813590506136a58161367f565b92915050565b600080604083850312156136c2576136c161346e565b5b60006136d085828601613613565b92505060206136e185828601613696565b9150509250929050565b600080604083850312156137025761370161346e565b5b600061371085828601613696565b9250506020613721858286016135b0565b9150509250929050565b6137348161358f565b82525050565b600060208201905061374f600083018461372b565b92915050565b60006fffffffffffffffffffffffffffffffff82169050919050565b61377a81613755565b811461378557600080fd5b50565b60008135905061379781613771565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f8401126137c2576137c161379d565b5b8235905067ffffffffffffffff8111156137df576137de6137a2565b5b6020830191508360018202830111156137fb576137fa6137a7565b5b9250929050565b6000806000806060858703121561381c5761381b61346e565b5b600061382a878288016135b0565b945050602061383b87828801613788565b935050604085013567ffffffffffffffff81111561385c5761385b613473565b5b613868878288016137ac565b925092505092959194509250565b61387f816134fd565b811461388a57600080fd5b50565b60008135905061389c81613876565b92915050565b6000602082840312156138b8576138b761346e565b5b60006138c68482850161388d565b91505092915050565b6000806000606084860312156138e8576138e761346e565b5b60006138f686828701613696565b935050602061390786828701613696565b9250506040613918868287016135b0565b9150509250925092565b6000602082840312156139385761393761346e565b5b600061394684828501613696565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61398481613553565b82525050565b6000613996838361397b565b60208301905092915050565b6000602082019050919050565b60006139ba8261394f565b6139c4818561395a565b93506139cf8361396b565b8060005b83811015613a005781516139e7888261398a565b97506139f2836139a2565b9250506001810190506139d3565b5085935050505092915050565b60006020820190508181036000830152613a2781846139af565b905092915050565b600060e082019050613a44600083018a613565565b613a51602083018961372b565b613a5e604083018861372b565b613a6b606083018761372b565b613a78608083018661372b565b613a8560a083018561372b565b613a9260c0830184613509565b98975050505050505050565b60008060008060808587031215613ab857613ab761346e565b5b6000613ac687828801613696565b9450506020613ad787828801613696565b9350506040613ae887828801613696565b9250506060613af987828801613696565b91505092959194509250565b600082825260208201905092915050565b7f5374616b696e67506f6f6c323a207374617465206572726f7200000000000000600082015250565b6000613b4c601983613b05565b9150613b5782613b16565b602082019050919050565b60006020820190508181036000830152613b7b81613b3f565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613bbc8261358f565b9150613bc78361358f565b9250828203905081811115613bdf57613bde613b82565b5b92915050565b7f5374616b696e67506f6f6c323a206f72646572206973206f7665720000000000600082015250565b6000613c1b601b83613b05565b9150613c2682613be5565b602082019050919050565b60006020820190508181036000830152613c4a81613c0e565b9050919050565b7f5374616b696e67506f6f6c323a2063616c6c20746f6f206672657175656e746c60008201527f7900000000000000000000000000000000000000000000000000000000000000602082015250565b6000613cad602183613b05565b9150613cb882613c51565b604082019050919050565b60006020820190508181036000830152613cdc81613ca0565b9050919050565b6000613cee8261358f565b9150613cf98361358f565b9250828202613d078161358f565b91508282048414831517613d1e57613d1d613b82565b5b5092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d5f8261358f565b9150613d6a8361358f565b925082613d7a57613d79613d25565b5b828204905092915050565b7f416363657373436f6e74726f6c3a2063616e206f6e6c792072656e6f756e636560008201527f20726f6c657320666f722073656c660000000000000000000000000000000000602082015250565b6000613de1602f83613b05565b9150613dec82613d85565b604082019050919050565b60006020820190508181036000830152613e1081613dd4565b9050919050565b6000613e228261358f565b9150613e2d8361358f565b9250828201905080821115613e4557613e44613b82565b5b92915050565b6000604082019050613e606000830185613565565b613e6d602083018461372b565b9392505050565b7f5374616b696e67506f6f6c323a206e6f6e636520697320616c7265616479206560008201527f7869737473000000000000000000000000000000000000000000000000000000602082015250565b6000613ed0602583613b05565b9150613edb82613e74565b604082019050919050565b60006020820190508181036000830152613eff81613ec3565b9050919050565b7f414d4f554e540000000000000000000000000000000000000000000000000000600082015250565b6000613f3c600683613b05565b9150613f4782613f06565b602082019050919050565b60006020820190508181036000830152613f6b81613f2f565b9050919050565b613f7b81613755565b82525050565b600060a082019050613f966000830188613565565b613fa36020830187613565565b613fb06040830186613565565b613fbd606083018561372b565b613fca6080830184613f72565b9695505050505050565b7f5374616b696e67506f6f6c323a206e6f7420796f7572206f7264657200000000600082015250565b600061400a601c83613b05565b915061401582613fd4565b602082019050919050565b6000602082019050818103600083015261403981613ffd565b9050919050565b7f5374616b696e67506f6f6c323a207369676e657220697320746865207a65726f60008201527f2061646472657373000000000000000000000000000000000000000000000000602082015250565b600061409c602883613b05565b91506140a782614040565b604082019050919050565b600060208201905081810360008301526140cb8161408f565b9050919050565b6000815190506140e18161367f565b92915050565b6000602082840312156140fd576140fc61346e565b5b600061410b848285016140d2565b91505092915050565b60006040820190506141296000830185613565565b6141366020830184613565565b9392505050565b7f4e6f74204f70656e000000000000000000000000000000000000000000000000600082015250565b6000614173600883613b05565b915061417e8261413d565b602082019050919050565b600060208201905081810360008301526141a281614166565b9050919050565b7f506c656467656420746f64617900000000000000000000000000000000000000600082015250565b60006141df600d83613b05565b91506141ea826141a9565b602082019050919050565b6000602082019050818103600083015261420e816141d2565b9050919050565b7f4d49535300000000000000000000000000000000000000000000000000000000600082015250565b600061424b600483613b05565b915061425682614215565b602082019050919050565b6000602082019050818103600083015261427a8161423e565b9050919050565b7f737570206e6f74207374616b696e670000000000000000000000000000000000600082015250565b60006142b7600f83613b05565b91506142c282614281565b602082019050919050565b600060208201905081810360008301526142e6816142aa565b9050919050565b7f534d414c4c000000000000000000000000000000000000000000000000000000600082015250565b6000614323600583613b05565b915061432e826142ed565b602082019050919050565b6000602082019050818103600083015261435281614316565b9050919050565b7f4558434545444544000000000000000000000000000000000000000000000000600082015250565b600061438f600883613b05565b915061439a82614359565b602082019050919050565b600060208201905081810360008301526143be81614382565b9050919050565b60006143d08261358f565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361440257614401613b82565b5b600182019050919050565b60008151905061441c81613876565b92915050565b6000602082840312156144385761443761346e565b5b60006144468482850161440d565b91505092915050565b600060a082019050614464600083018861372b565b6144716020830187613565565b61447e604083018661372b565b61448b606083018561372b565b614498608083018461372b565b9695505050505050565b7f5374616b696e67506f6f6c323a2076616c20697320746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006144fe602583613b05565b9150614509826144a2565b604082019050919050565b6000602082019050818103600083015261452d816144f1565b9050919050565b7f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160008201527f647920696e697469616c697a6564000000000000000000000000000000000000602082015250565b6000614590602e83613b05565b915061459b82614534565b604082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b6000819050919050565b600060ff82169050919050565b6000819050919050565b60006146026145fd6145f8846145c6565b6145dd565b6145d0565b9050919050565b614612816145e7565b82525050565b600060208201905061462d6000830184614609565b92915050565b60006060820190506146486000830186613565565b6146556020830185613565565b614662604083018461372b565b949350505050565b7f5369676e6174757265436865636b65723a20496e76616c6964207369676e617460008201527f7572650000000000000000000000000000000000000000000000000000000000602082015250565b60006146c6602383613b05565b91506146d18261466a565b604082019050919050565b600060208201905081810360008301526146f5816146b9565b9050919050565b7f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960008201527f6e697469616c697a696e67000000000000000000000000000000000000000000602082015250565b6000614758602b83613b05565b9150614763826146fc565b604082019050919050565b600060208201905081810360008301526147878161474b565b9050919050565b7f5361666545524332303a204552433230206f7065726174696f6e20646964206e60008201527f6f74207375636365656400000000000000000000000000000000000000000000602082015250565b60006147ea602a83613b05565b91506147f58261478e565b604082019050919050565b60006020820190508181036000830152614819816147dd565b9050919050565b600081905092915050565b7f416363657373436f6e74726f6c3a206163636f756e7420000000000000000000600082015250565b6000614861601783614820565b915061486c8261482b565b601782019050919050565b600081519050919050565b60005b838110156148a0578082015181840152602081019050614885565b60008484015250505050565b60006148b782614877565b6148c18185614820565b93506148d1818560208601614882565b80840191505092915050565b7f206973206d697373696e6720726f6c6520000000000000000000000000000000600082015250565b6000614913601183614820565b915061491e826148dd565b601182019050919050565b600061493482614854565b915061494082856148ac565b915061494b82614906565b915061495782846148ac565b91508190509392505050565b6000601f19601f8301169050919050565b600061497f82614877565b6149898185613b05565b9350614999818560208601614882565b6149a281614963565b840191505092915050565b600060208201905081810360008301526149c78184614974565b905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000614a678261358f565b915060008203614a7a57614a79613b82565b5b600182039050919050565b7f537472696e67733a20686578206c656e67746820696e73756666696369656e74600082015250565b6000614abb602083613b05565b9150614ac682614a85565b602082019050919050565b60006020820190508181036000830152614aea81614aae565b9050919050565b7f416464726573733a20696e73756666696369656e742062616c616e636520666f60008201527f722063616c6c0000000000000000000000000000000000000000000000000000602082015250565b6000614b4d602683613b05565b9150614b5882614af1565b604082019050919050565b60006020820190508181036000830152614b7c81614b40565b9050919050565b600081519050919050565b600081905092915050565b6000614ba482614b83565b614bae8185614b8e565b9350614bbe818560208601614882565b80840191505092915050565b6000614bd68284614b99565b915081905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f45434453413a20696e76616c6964207369676e61747572650000000000000000600082015250565b6000614c46601883613b05565b9150614c5182614c10565b602082019050919050565b60006020820190508181036000830152614c7581614c39565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265206c656e67746800600082015250565b6000614cb2601f83613b05565b9150614cbd82614c7c565b602082019050919050565b60006020820190508181036000830152614ce181614ca5565b9050919050565b7f45434453413a20696e76616c6964207369676e6174757265202773272076616c60008201527f7565000000000000000000000000000000000000000000000000000000000000602082015250565b6000614d44602283613b05565b9150614d4f82614ce8565b604082019050919050565b60006020820190508181036000830152614d7381614d37565b9050919050565b7f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000600082015250565b6000614db0601d83613b05565b9150614dbb82614d7a565b602082019050919050565b60006020820190508181036000830152614ddf81614da3565b9050919050565b614def816145d0565b82525050565b6000608082019050614e0a6000830187613655565b614e176020830186614de6565b614e246040830185613655565b614e316060830184613655565b9594505050505056fea2646970667358221220acce0f6f02e82e13609258e5e91f5e5d5a9b52f9b3229d74cbc82d1fd766950264736f6c63430008120033