60806040523480156200001157600080fd5b506040518060400160405280600481526020017f46726565000000000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4652454500000000000000000000000000000000000000000000000000000000815250816000908051906020019062000096929190620001b6565b508060019080519060200190620000af929190620001b6565b505050620000d2620000c6620000e860201b60201c565b620000f060201b60201c565b60006007819055506000600881905550620002cb565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620001c49062000295565b90600052602060002090601f016020900481019282620001e8576000855562000234565b82601f106200020357805160ff191683800117855562000234565b8280016001018555821562000234579182015b828111156200023357825182559160200191906001019062000216565b5b50905062000243919062000247565b5090565b5b808211156200026257600081600090555060010162000248565b5090565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620002ae57607f821691505b60208210811415620002c557620002c462000266565b5b50919050565b61500e80620002db6000396000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806370a082311161010f578063b88d4fde116100a2578063dc4f2bbc11610071578063dc4f2bbc1461058a578063e985e9c5146105ba578063f2fde38b146105ea578063f51c8ce514610606576101e5565b8063b88d4fde14610506578063c3ac399e14610522578063c87b56dd1461053e578063d4434ab01461056e576101e5565b80638da5cb5b116100de5780638da5cb5b1461049257806394bf804d146104b057806395d89b41146104cc578063a22cb465146104ea576101e5565b806370a082311461040c578063715018a61461043c57806375c10ffa1461044657806380abf7c414610476576101e5565b80631febbd4b1161018757806342842e0e1161015657806342842e0e1461038657806352a6c8c9146103a25780636352211e146103be5780636b87d24c146103ee576101e5565b80631febbd4b1461030257806323b872dd146103325780632c4d6f7e1461034e5780633a5c35dc1461036a576101e5565b8063095ea7b3116101c3578063095ea7b3146102685780631177f3791461028457806318160ddd146102b45780631ae21c74146102d2576101e5565b806301ffc9a7146101ea57806306fdde031461021a578063081812fc14610238575b600080fd5b61020460048036038101906101ff9190613103565b61063b565b604051610211919061314b565b60405180910390f35b61022261071d565b60405161022f91906131ff565b60405180910390f35b610252600480360381019061024d9190613257565b6107af565b60405161025f91906132c5565b60405180910390f35b610282600480360381019061027d919061330c565b610834565b005b61029e60048036038101906102999190613257565b61094c565b6040516102ab91906131ff565b60405180910390f35b6102bc6109ec565b6040516102c9919061335b565b60405180910390f35b6102ec60048036038101906102e79190613257565b6109f6565b6040516102f9919061335b565b60405180910390f35b61031c60048036038101906103179190613257565b610a0e565b60405161032991906132c5565b60405180910390f35b61034c60048036038101906103479190613376565b610a41565b005b610368600480360381019061036391906133c9565b610aa1565b005b610384600480360381019061037f919061346e565b610ca0565b005b6103a0600480360381019061039b9190613376565b610da5565b005b6103bc60048036038101906103b7919061359f565b610dc5565b005b6103d860048036038101906103d39190613257565b610efd565b6040516103e591906132c5565b60405180910390f35b6103f6610faf565b60405161040391906131ff565b60405180910390f35b61042660048036038101906104219190613634565b610fe8565b604051610433919061335b565b60405180910390f35b6104446110a0565b005b610460600480360381019061045b9190613257565b611128565b60405161046d919061335b565b60405180910390f35b610490600480360381019061048b9190613661565b611140565b005b61049a61130b565b6040516104a791906132c5565b60405180910390f35b6104ca60048036038101906104c591906133c9565b611335565b005b6104d46114b9565b6040516104e191906131ff565b60405180910390f35b61050460048036038101906104ff91906137be565b61154b565b005b610520600480360381019061051b919061392e565b6116cc565b005b61053c6004803603810190610537919061359f565b61172e565b005b61055860048036038101906105539190613257565b6118b1565b60405161056591906131ff565b60405180910390f35b610588600480360381019061058391906139b1565b611db7565b005b6105a4600480360381019061059f9190613257565b611ea8565b6040516105b1919061335b565b60405180910390f35b6105d460048036038101906105cf9190613a32565b611ec0565b6040516105e1919061314b565b60405180910390f35b61060460048036038101906105ff9190613634565b611f54565b005b610620600480360381019061061b9190613257565b61204c565b60405161063296959493929190613a72565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061070657507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610716575061071582612330565b5b9050919050565b60606000805461072c90613b25565b80601f016020809104026020016040519081016040528092919081815260200182805461075890613b25565b80156107a55780601f1061077a576101008083540402835291602001916107a5565b820191906000526020600020905b81548152906001019060200180831161078857829003601f168201915b5050505050905090565b60006107ba8261239a565b6107f9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107f090613bc9565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061083f82610efd565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156108b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108a790613c5b565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166108cf612406565b73ffffffffffffffffffffffffffffffffffffffff1614806108fe57506108fd816108f8612406565b611ec0565b5b61093d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161093490613ced565b60405180910390fd5b610947838361240e565b505050565b600e602052806000526040600020600091509050805461096b90613b25565b80601f016020809104026020016040519081016040528092919081815260200182805461099790613b25565b80156109e45780601f106109b9576101008083540402835291602001916109e4565b820191906000526020600020905b8154815290600101906020018083116109c757829003601f168201915b505050505081565b6000600754905090565b600d6020528060005260406000206000915090505481565b600c6020528060005260406000206000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b610a52610a4c612406565b826124c7565b610a91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a8890613d7f565b60405180910390fd5b610a9c8383836125a5565b505050565b610aa9612406565b73ffffffffffffffffffffffffffffffffffffffff16610ac761130b565b73ffffffffffffffffffffffffffffffffffffffff1614610b1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1490613deb565b60405180910390fd5b6008548210610b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b5890613e57565b60405180910390fd5b6000600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506000600f60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055506001600f60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555081600c600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550505050565b610ca8612406565b73ffffffffffffffffffffffffffffffffffffffff16610cc661130b565b73ffffffffffffffffffffffffffffffffffffffff1614610d1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1390613deb565b60405180910390fd5b6000600960008d815260200190815260200160002090508a8a826001019190610d46929190612f6e565b508888826002019190610d5a929190612f6e565b508686826003019190610d6e929190612f6e565b508484826004019190610d82929190612f6e565b508282826005019190610d96929190612f6e565b50505050505050505050505050565b610dc0838383604051806020016040528060008152506116cc565b505050565b610dcd612406565b73ffffffffffffffffffffffffffffffffffffffff16610deb61130b565b73ffffffffffffffffffffffffffffffffffffffff161480610e475750610e10612406565b73ffffffffffffffffffffffffffffffffffffffff16610e2f86610efd565b73ffffffffffffffffffffffffffffffffffffffff16145b610e86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e7d90613ee9565b60405180910390fd5b8383604051610e96929190613f39565b604051809103902085610ea7612406565b73ffffffffffffffffffffffffffffffffffffffff167fad000c5a693465b4555f1044ddd1221ef0bfc49e5621ceb705b952ff97e2caac8585604051610eee929190613f7f565b60405180910390a45050505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9d90614015565b60405180910390fd5b80915050919050565b6040518060400160405280600381526020017f434330000000000000000000000000000000000000000000000000000000000081525081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611059576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611050906140a7565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110a8612406565b73ffffffffffffffffffffffffffffffffffffffff166110c661130b565b73ffffffffffffffffffffffffffffffffffffffff161461111c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111390613deb565b60405180910390fd5b61112660006127f6565b565b600a6020528060005260406000206000915090505481565b611148612406565b73ffffffffffffffffffffffffffffffffffffffff1661116661130b565b73ffffffffffffffffffffffffffffffffffffffff16146111bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b390613deb565b60405180910390fd5b8a600c6000600854815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001600f60008d73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550600060096000600854815260200190815260200160002090508a8a826001019190611294929190612f6e565b5088888260020191906112a8929190612f6e565b5086868260030191906112bc929190612f6e565b5084848260040191906112d0929190612f6e565b5082828260050191906112e4929190612f6e565b50600860008154809291906112f8906140f6565b9190505550505050505050505050505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61133d612406565b73ffffffffffffffffffffffffffffffffffffffff16600c600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d4906141b1565b60405180910390fd5b6008548210611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890613e57565b60405180910390fd5b61142d816007546128bc565b81600a6000600754815260200190815260200160002081905550600d600083815260200190815260200160002054600b6000600754815260200190815260200160002081905550600d60008381526020019081526020016000206000815480929190611498906140f6565b9190505550600760008154809291906114b0906140f6565b91905055505050565b6060600180546114c890613b25565b80601f01602080910402602001604051908101604052809291908181526020018280546114f490613b25565b80156115415780601f1061151657610100808354040283529160200191611541565b820191906000526020600020905b81548152906001019060200180831161152457829003601f168201915b5050505050905090565b611553612406565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b89061421d565b60405180910390fd5b80600560006115ce612406565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661167b612406565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516116c0919061314b565b60405180910390a35050565b6116dd6116d7612406565b836124c7565b61171c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161171390613d7f565b60405180910390fd5b61172884848484612a7e565b50505050565b600f60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166117ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b1906142af565b60405180910390fd5b6000600e600087815260200190815260200160002080546117da90613b25565b80601f016020809104026020016040519081016040528092919081815260200182805461180690613b25565b80156118535780601f1061182857610100808354040283529160200191611853565b820191906000526020600020905b81548152906001019060200180831161183657829003601f168201915b5050505050905080858585856040516020016118739594939291906143e4565b604051602081830303815290604052600e600088815260200190815260200160002090805190602001906118a8929190612ff4565b50505050505050565b60606118bc8261239a565b6118fb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f2906144ac565b60405180910390fd5b600060096000600a60008681526020019081526020016000205481526020019081526020016000206040518060c00160405290816000820154815260200160018201805461194890613b25565b80601f016020809104026020016040519081016040528092919081815260200182805461197490613b25565b80156119c15780601f10611996576101008083540402835291602001916119c1565b820191906000526020600020905b8154815290600101906020018083116119a457829003601f168201915b505050505081526020016002820180546119da90613b25565b80601f0160208091040260200160405190810160405280929190818152602001828054611a0690613b25565b8015611a535780601f10611a2857610100808354040283529160200191611a53565b820191906000526020600020905b815481529060010190602001808311611a3657829003601f168201915b50505050508152602001600382018054611a6c90613b25565b80601f0160208091040260200160405190810160405280929190818152602001828054611a9890613b25565b8015611ae55780601f10611aba57610100808354040283529160200191611ae5565b820191906000526020600020905b815481529060010190602001808311611ac857829003601f168201915b50505050508152602001600482018054611afe90613b25565b80601f0160208091040260200160405190810160405280929190818152602001828054611b2a90613b25565b8015611b775780601f10611b4c57610100808354040283529160200191611b77565b820191906000526020600020905b815481529060010190602001808311611b5a57829003601f168201915b50505050508152602001600582018054611b9090613b25565b80601f0160208091040260200160405190810160405280929190818152602001828054611bbc90613b25565b8015611c095780601f10611bde57610100808354040283529160200191611c09565b820191906000526020600020905b815481529060010190602001808311611bec57829003601f168201915b50505050508152505090506000611c1f84612ada565b90506000611c3f600a600087815260200190815260200160002054612ada565b90506000611c5f600b600088815260200190815260200160002054612ada565b90506000600e60008881526020019081526020016000208054611c8190613b25565b80601f0160208091040260200160405190810160405280929190818152602001828054611cad90613b25565b8015611cfa5780601f10611ccf57610100808354040283529160200191611cfa565b820191906000526020600020905b815481529060010190602001808311611cdd57829003601f168201915b505050505090506000611d888660200151848860a001516040518060400160405280600381526020017f43433000000000000000000000000000000000000000000000000000000000008152508a606001518b608001518c604001518b8d8d8c604051602001611d749b9a999897969594939291906147ea565b604051602081830303815290604052612c3b565b905080604051602001611d9b919061493d565b6040516020818303038152906040529650505050505050919050565b611dbf612406565b73ffffffffffffffffffffffffffffffffffffffff16611ddd61130b565b73ffffffffffffffffffffffffffffffffffffffff1614611e33576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2a90613deb565b60405180910390fd5b8383604051611e43929190613f39565b6040518091039020611e53612406565b73ffffffffffffffffffffffffffffffffffffffff167f3d366eac52dec4372766dc4b15bba20b935b45d33171465a598eedabb5a5dff88484604051611e9a929190613f7f565b60405180910390a350505050565b600b6020528060005260406000206000915090505481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f5c612406565b73ffffffffffffffffffffffffffffffffffffffff16611f7a61130b565b73ffffffffffffffffffffffffffffffffffffffff1614611fd0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc790613deb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612040576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612037906149d1565b60405180910390fd5b612049816127f6565b50565b600960205280600052604060002060009150905080600001549080600101805461207590613b25565b80601f01602080910402602001604051908101604052809291908181526020018280546120a190613b25565b80156120ee5780601f106120c3576101008083540402835291602001916120ee565b820191906000526020600020905b8154815290600101906020018083116120d157829003601f168201915b50505050509080600201805461210390613b25565b80601f016020809104026020016040519081016040528092919081815260200182805461212f90613b25565b801561217c5780601f106121515761010080835404028352916020019161217c565b820191906000526020600020905b81548152906001019060200180831161215f57829003601f168201915b50505050509080600301805461219190613b25565b80601f01602080910402602001604051908101604052809291908181526020018280546121bd90613b25565b801561220a5780601f106121df5761010080835404028352916020019161220a565b820191906000526020600020905b8154815290600101906020018083116121ed57829003601f168201915b50505050509080600401805461221f90613b25565b80601f016020809104026020016040519081016040528092919081815260200182805461224b90613b25565b80156122985780601f1061226d57610100808354040283529160200191612298565b820191906000526020600020905b81548152906001019060200180831161227b57829003601f168201915b5050505050908060050180546122ad90613b25565b80601f01602080910402602001604051908101604052809291908181526020018280546122d990613b25565b80156123265780601f106122fb57610100808354040283529160200191612326565b820191906000526020600020905b81548152906001019060200180831161230957829003601f168201915b5050505050905086565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661248183610efd565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006124d28261239a565b612511576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161250890614a63565b60405180910390fd5b600061251c83610efd565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061258b57508373ffffffffffffffffffffffffffffffffffffffff16612573846107af565b73ffffffffffffffffffffffffffffffffffffffff16145b8061259c575061259b8185611ec0565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166125c582610efd565b73ffffffffffffffffffffffffffffffffffffffff161461261b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161261290614af5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561268b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161268290614b87565b60405180910390fd5b61269660008261240e565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546126e69190614ba7565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461273d9190614bdb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561292c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292390614c7d565b60405180910390fd5b6129358161239a565b15612975576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161296c90614ce9565b60405180910390fd5b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129c59190614bdb565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b612a898484846125a5565b612a9584848484612dd3565b612ad4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acb90614d7b565b60405180910390fd5b50505050565b60606000821415612b22576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612c36565b600082905060005b60008214612b54578080612b3d906140f6565b915050600a82612b4d9190614dca565b9150612b2a565b60008167ffffffffffffffff811115612b7057612b6f613803565b5b6040519080825280601f01601f191660200182016040528015612ba25781602001600182028036833780820191505090505b5090505b60008514612c2f57600182612bbb9190614ba7565b9150600a85612bca9190614dfb565b6030612bd69190614bdb565b60f81b818381518110612bec57612beb614e2c565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612c289190614dca565b9450612ba6565b8093505050505b919050565b60606000825190506000811415612c645760405180602001604052806000815250915050612dce565b60006003600283612c759190614bdb565b612c7f9190614dca565b6004612c8b9190614e5b565b90506000602082612c9c9190614bdb565b67ffffffffffffffff811115612cb557612cb4613803565b5b6040519080825280601f01601f191660200182016040528015612ce75781602001600182028036833780820191505090505b5090506000604051806060016040528060408152602001614f99604091399050600181016020830160005b86811015612d8b5760038101905062ffffff818a015116603f8160121c168401518060081b905060ff603f83600c1c1686015116810190508060081b905060ff603f8360061c1686015116810190508060081b905060ff603f831686015116810190508060e01b90508084526004840193505050612d12565b506003860660018114612da55760028114612db557612dc0565b613d3d60f01b6002830352612dc0565b603d60f81b60018303525b508484525050819450505050505b919050565b6000612df48473ffffffffffffffffffffffffffffffffffffffff16612f5b565b15612f4e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612e1d612406565b8786866040518563ffffffff1660e01b8152600401612e3f9493929190614f0a565b6020604051808303816000875af1925050508015612e7b57506040513d601f19601f82011682018060405250810190612e789190614f6b565b60015b612efe573d8060008114612eab576040519150601f19603f3d011682016040523d82523d6000602084013e612eb0565b606091505b50600081511415612ef6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612eed90614d7b565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612f53565b600190505b949350505050565b600080823b905060008111915050919050565b828054612f7a90613b25565b90600052602060002090601f016020900481019282612f9c5760008555612fe3565b82601f10612fb557803560ff1916838001178555612fe3565b82800160010185558215612fe3579182015b82811115612fe2578235825591602001919060010190612fc7565b5b509050612ff0919061307a565b5090565b82805461300090613b25565b90600052602060002090601f0160209004810192826130225760008555613069565b82601f1061303b57805160ff1916838001178555613069565b82800160010185558215613069579182015b8281111561306857825182559160200191906001019061304d565b5b509050613076919061307a565b5090565b5b8082111561309357600081600090555060010161307b565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6130e0816130ab565b81146130eb57600080fd5b50565b6000813590506130fd816130d7565b92915050565b600060208284031215613119576131186130a1565b5b6000613127848285016130ee565b91505092915050565b60008115159050919050565b61314581613130565b82525050565b6000602082019050613160600083018461313c565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b838110156131a0578082015181840152602081019050613185565b838111156131af576000848401525b50505050565b6000601f19601f8301169050919050565b60006131d182613166565b6131db8185613171565b93506131eb818560208601613182565b6131f4816131b5565b840191505092915050565b6000602082019050818103600083015261321981846131c6565b905092915050565b6000819050919050565b61323481613221565b811461323f57600080fd5b50565b6000813590506132518161322b565b92915050565b60006020828403121561326d5761326c6130a1565b5b600061327b84828501613242565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006132af82613284565b9050919050565b6132bf816132a4565b82525050565b60006020820190506132da60008301846132b6565b92915050565b6132e9816132a4565b81146132f457600080fd5b50565b600081359050613306816132e0565b92915050565b60008060408385031215613323576133226130a1565b5b6000613331858286016132f7565b925050602061334285828601613242565b9150509250929050565b61335581613221565b82525050565b6000602082019050613370600083018461334c565b92915050565b60008060006060848603121561338f5761338e6130a1565b5b600061339d868287016132f7565b93505060206133ae868287016132f7565b92505060406133bf86828701613242565b9150509250925092565b600080604083850312156133e0576133df6130a1565b5b60006133ee85828601613242565b92505060206133ff858286016132f7565b9150509250929050565b600080fd5b600080fd5b600080fd5b60008083601f84011261342e5761342d613409565b5b8235905067ffffffffffffffff81111561344b5761344a61340e565b5b60208301915083600182028301111561346757613466613413565b5b9250929050565b600080600080600080600080600080600060c08c8e031215613493576134926130a1565b5b60006134a18e828f01613242565b9b505060208c013567ffffffffffffffff8111156134c2576134c16130a6565b5b6134ce8e828f01613418565b9a509a505060408c013567ffffffffffffffff8111156134f1576134f06130a6565b5b6134fd8e828f01613418565b985098505060608c013567ffffffffffffffff8111156135205761351f6130a6565b5b61352c8e828f01613418565b965096505060808c013567ffffffffffffffff81111561354f5761354e6130a6565b5b61355b8e828f01613418565b945094505060a08c013567ffffffffffffffff81111561357e5761357d6130a6565b5b61358a8e828f01613418565b92509250509295989b509295989b9093969950565b6000806000806000606086880312156135bb576135ba6130a1565b5b60006135c988828901613242565b955050602086013567ffffffffffffffff8111156135ea576135e96130a6565b5b6135f688828901613418565b9450945050604086013567ffffffffffffffff811115613619576136186130a6565b5b61362588828901613418565b92509250509295509295909350565b60006020828403121561364a576136496130a1565b5b6000613658848285016132f7565b91505092915050565b600080600080600080600080600080600060c08c8e031215613686576136856130a1565b5b60006136948e828f016132f7565b9b505060208c013567ffffffffffffffff8111156136b5576136b46130a6565b5b6136c18e828f01613418565b9a509a505060408c013567ffffffffffffffff8111156136e4576136e36130a6565b5b6136f08e828f01613418565b985098505060608c013567ffffffffffffffff811115613713576137126130a6565b5b61371f8e828f01613418565b965096505060808c013567ffffffffffffffff811115613742576137416130a6565b5b61374e8e828f01613418565b945094505060a08c013567ffffffffffffffff811115613771576137706130a6565b5b61377d8e828f01613418565b92509250509295989b509295989b9093969950565b61379b81613130565b81146137a657600080fd5b50565b6000813590506137b881613792565b92915050565b600080604083850312156137d5576137d46130a1565b5b60006137e3858286016132f7565b92505060206137f4858286016137a9565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61383b826131b5565b810181811067ffffffffffffffff8211171561385a57613859613803565b5b80604052505050565b600061386d613097565b90506138798282613832565b919050565b600067ffffffffffffffff82111561389957613898613803565b5b6138a2826131b5565b9050602081019050919050565b82818337600083830152505050565b60006138d16138cc8461387e565b613863565b9050828152602081018484840111156138ed576138ec6137fe565b5b6138f88482856138af565b509392505050565b600082601f83011261391557613914613409565b5b81356139258482602086016138be565b91505092915050565b60008060008060808587031215613948576139476130a1565b5b6000613956878288016132f7565b9450506020613967878288016132f7565b935050604061397887828801613242565b925050606085013567ffffffffffffffff811115613999576139986130a6565b5b6139a587828801613900565b91505092959194509250565b600080600080604085870312156139cb576139ca6130a1565b5b600085013567ffffffffffffffff8111156139e9576139e86130a6565b5b6139f587828801613418565b9450945050602085013567ffffffffffffffff811115613a1857613a176130a6565b5b613a2487828801613418565b925092505092959194509250565b60008060408385031215613a4957613a486130a1565b5b6000613a57858286016132f7565b9250506020613a68858286016132f7565b9150509250929050565b600060c082019050613a87600083018961334c565b8181036020830152613a9981886131c6565b90508181036040830152613aad81876131c6565b90508181036060830152613ac181866131c6565b90508181036080830152613ad581856131c6565b905081810360a0830152613ae981846131c6565b9050979650505050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613b3d57607f821691505b60208210811415613b5157613b50613af6565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613bb3602c83613171565b9150613bbe82613b57565b604082019050919050565b60006020820190508181036000830152613be281613ba6565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613c45602183613171565b9150613c5082613be9565b604082019050919050565b60006020820190508181036000830152613c7481613c38565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613cd7603883613171565b9150613ce282613c7b565b604082019050919050565b60006020820190508181036000830152613d0681613cca565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613d69603183613171565b9150613d7482613d0d565b604082019050919050565b60006020820190508181036000830152613d9881613d5c565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613dd5602083613171565b9150613de082613d9f565b602082019050919050565b60006020820190508181036000830152613e0481613dc8565b9050919050565b7f436f6c6c656374696f6e20494420646f6573206e6f7420657869737400000000600082015250565b6000613e41601c83613171565b9150613e4c82613e0b565b602082019050919050565b60006020820190508181036000830152613e7081613e34565b9050919050565b7f4f6e6c792070726f6a656374206f7220746f6b656e206f776e65722063616e2060008201527f656d697420746f6b656e206576656e7400000000000000000000000000000000602082015250565b6000613ed3603083613171565b9150613ede82613e77565b604082019050919050565b60006020820190508181036000830152613f0281613ec6565b9050919050565b600081905092915050565b6000613f208385613f09565b9350613f2d8385846138af565b82840190509392505050565b6000613f46828486613f14565b91508190509392505050565b6000613f5e8385613171565b9350613f6b8385846138af565b613f74836131b5565b840190509392505050565b60006020820190508181036000830152613f9a818486613f52565b90509392505050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613fff602983613171565b915061400a82613fa3565b604082019050919050565b6000602082019050818103600083015261402e81613ff2565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614091602a83613171565b915061409c82614035565b604082019050919050565b600060208201905081810360008301526140c081614084565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061410182613221565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614134576141336140c7565b5b600182019050919050565b7f43616c6c6572206973206e6f7420746865206d696e74696e672061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061419b602183613171565b91506141a68261413f565b604082019050919050565b600060208201905081810360008301526141ca8161418e565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614207601983613171565b9150614212826141d1565b602082019050919050565b60006020820190508181036000830152614236816141fa565b9050919050565b7f53656e646572206e6f74206f6e2061747472696275746520757064617465206160008201527f6c6c6f77206c6973742e00000000000000000000000000000000000000000000602082015250565b6000614299602a83613171565b91506142a48261423d565b604082019050919050565b600060208201905081810360008301526142c88161428c565b9050919050565b60006142da82613166565b6142e48185613f09565b93506142f4818560208601613182565b80840191505092915050565b7f2c7b2274726169745f74797065223a2200000000000000000000000000000000600082015250565b6000614336601083613f09565b915061434182614300565b601082019050919050565b7f222c2276616c7565223a00000000000000000000000000000000000000000000600082015250565b6000614382600a83613f09565b915061438d8261434c565b600a82019050919050565b7f7d00000000000000000000000000000000000000000000000000000000000000600082015250565b60006143ce600183613f09565b91506143d982614398565b600182019050919050565b60006143f082886142cf565b91506143fb82614329565b9150614408828688613f14565b915061441382614375565b9150614420828486613f14565b915061442b826143c1565b91508190509695505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614496602f83613171565b91506144a18261443a565b604082019050919050565b600060208201905081810360008301526144c581614489565b9050919050565b7f7b226e616d65223a202200000000000000000000000000000000000000000000600082015250565b6000614502600a83613f09565b915061450d826144cc565b600a82019050919050565b7f222c20226465736372697074696f6e223a202200000000000000000000000000600082015250565b600061454e601383613f09565b915061455982614518565b601382019050919050565b7f222c20226c6963656e7365223a20220000000000000000000000000000000000600082015250565b600061459a600f83613f09565b91506145a582614564565b600f82019050919050565b7f222c2022696d616765223a202200000000000000000000000000000000000000600082015250565b60006145e6600d83613f09565b91506145f1826145b0565b600d82019050919050565b7f222c202265787465726e616c5f75726c223a2022000000000000000000000000600082015250565b6000614632601483613f09565b915061463d826145fc565b601482019050919050565b7f3f636f6c6c656374696f6e49643d000000000000000000000000000000000000600082015250565b600061467e600e83613f09565b915061468982614648565b600e82019050919050565b7f26746f6b656e49643d0000000000000000000000000000000000000000000000600082015250565b60006146ca600983613f09565b91506146d582614694565b600982019050919050565b7f222c202261747472696275746573223a205b7b2274726169745f74797065223a60008201527f22436f6c6c656374696f6e222c202276616c7565223a22000000000000000000602082015250565b600061473c603783613f09565b9150614747826146e0565b603782019050919050565b7f227d000000000000000000000000000000000000000000000000000000000000600082015250565b6000614788600283613f09565b915061479382614752565b600282019050919050565b7f5d7d000000000000000000000000000000000000000000000000000000000000600082015250565b60006147d4600283613f09565b91506147df8261479e565b600282019050919050565b60006147f5826144f5565b9150614801828e6142cf565b915061480d828d6142cf565b915061481882614541565b9150614824828c6142cf565b915061482f8261458d565b915061483b828b6142cf565b9150614846826145d9565b9150614852828a6142cf565b915061485e82896142cf565b915061486982614625565b915061487582886142cf565b915061488082614671565b915061488c82876142cf565b9150614897826146bd565b91506148a382866142cf565b91506148ae8261472f565b91506148ba82856142cf565b91506148c58261477b565b91506148d182846142cf565b91506148dc826147c7565b91508190509c9b505050505050505050505050565b7f646174613a6170706c69636174696f6e2f6a736f6e3b6261736536342c000000600082015250565b6000614927601d83613f09565b9150614932826148f1565b601d82019050919050565b60006149488261491a565b915061495482846142cf565b915081905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b60006149bb602683613171565b91506149c68261495f565b604082019050919050565b600060208201905081810360008301526149ea816149ae565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614a4d602c83613171565b9150614a58826149f1565b604082019050919050565b60006020820190508181036000830152614a7c81614a40565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b6000614adf602983613171565b9150614aea82614a83565b604082019050919050565b60006020820190508181036000830152614b0e81614ad2565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614b71602483613171565b9150614b7c82614b15565b604082019050919050565b60006020820190508181036000830152614ba081614b64565b9050919050565b6000614bb282613221565b9150614bbd83613221565b925082821015614bd057614bcf6140c7565b5b828203905092915050565b6000614be682613221565b9150614bf183613221565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c2657614c256140c7565b5b828201905092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c67602083613171565b9150614c7282614c31565b602082019050919050565b60006020820190508181036000830152614c9681614c5a565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614cd3601c83613171565b9150614cde82614c9d565b602082019050919050565b60006020820190508181036000830152614d0281614cc6565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614d65603283613171565b9150614d7082614d09565b604082019050919050565b60006020820190508181036000830152614d9481614d58565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614dd582613221565b9150614de083613221565b925082614df057614def614d9b565b5b828204905092915050565b6000614e0682613221565b9150614e1183613221565b925082614e2157614e20614d9b565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000614e6682613221565b9150614e7183613221565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614eaa57614ea96140c7565b5b828202905092915050565b600081519050919050565b600082825260208201905092915050565b6000614edc82614eb5565b614ee68185614ec0565b9350614ef6818560208601613182565b614eff816131b5565b840191505092915050565b6000608082019050614f1f60008301876132b6565b614f2c60208301866132b6565b614f39604083018561334c565b8181036060830152614f4b8184614ed1565b905095945050505050565b600081519050614f65816130d7565b92915050565b600060208284031215614f8157614f806130a1565b5b6000614f8f84828501614f56565b9150509291505056fe4142434445464748494a4b4c4d4e4f505152535455565758595a6162636465666768696a6b6c6d6e6f707172737475767778797a303132333435363738392b2fa2646970667358221220a05c578a57d84aa7951c422f2919aff4b91ba9be0dbf2c845dafbe60825d34e564736f6c634300080b0033